画竜点睛を衝く@mapyo

日々やった事をつらつらと書くブログです

ktlintをAndroid Studio上で自動で実行してフォーマットしてくれるようにする

モチベーション

ktlintいいのだけど、pushしてからCIが回ってコメントついてから修正するよりも、事前に手元でわかるのであればわかるようにしたい。

とはいえ、毎回手元でktlintを実行するのはちょっとだるいので出来れば自動でいい感じになおして欲しい。 理想はAndroid Studioの方でktlintに沿ってないコードを書いた時に警告が表示されて、option + enterで自動でなおってほしい。しかし、そんなプラグインは現状調べた限りではなさそう。

やること

File Watchersを導入してktlintコマンドを使って定期的に実行する。

1. ktlintコマンドのインストール

brew tap shyiko/ktlint && brew install shyiko/ktlint/ktlint

2. File Watchersをインストール

pluginの部分で、 File Watchers と検索してインストールするだけ

3. File Watchersの設定

以下のように設定する。

f:id:mapyo:20190204103006p:plain

ポイントはAdvanced Optionsのところのチェックをすべて外すとよいかもしれない。

一番上の Auto-save edited files to trigger the watcher の部分にチェックが入っていると、ファイルを編集してauto saveが発動されたタイミングでktlintが実行されてしまう。

これはちょっと修正して考えている間に勝手にファイルがフォーマットされてちょっとうざいのと、ktlintが発動してフォーマット中にファイルを編集すると、メモリ上にあるやつと、フォーマットした結果のファイル、どっちが正しいの?というダイアログが毎回出てきてつらい。

弱点

この方法は完璧ではない。

  • ktlintが発動して、完了するまでが長い。6秒くらいかかる。一瞬で終わって欲しい。
  • 僕はターミナルからgit commitするからいいのだけど、IDEでCommit Changesしてる人は、command + kで出したタイミングでktlintが発動するので、コミットした後にフォーマットされてしまう。ターミナルからでも6秒くらいかかるので、一瞬でgit commitしてしまうと、commit後にフォーマットになってしまう。
  • ktlintのコマンドインストールしないといけない。そもそも、Android Studioでいい感じにやってほしい気持ち。

その他

やってもよさそうなこと

https://github.com/shyiko/ktlint#option-1-recommended

こちらにのっている、おすすめの設定の適用をする。

ktlint --apply-to-idea-project --android

以下のファイルが生成されるため、これをgit管理しとくといいかもしれない。

./.idea/codeStyles/codeStyleConfig.xml
./.idea/codeStyles/Project.xml
./.idea/inspectionProfiles/profiles_settings.xml
./.idea/inspectionProfiles/ktlint.xml
./.idea/workspace.xml

しかし、codeStyleConfigなどはすでに設定してたりするとバッティングしそう。

やってもいいかなと思ったけど、僕はやる気になれなかった事。

ktlint --install-git-pre-commit-hook

これでpre-commitに追加してくれて、commit前にチェックしてくれる。 しかしながら、これはcommitする時にちょっと処理が遅くなりそうなのと、エラーを出すだけで、自動でformatしてくれなかったのでやめた。 もうちょい様子をみて、やるかどうかは考える。

所感

もうちょっといい感じにAndroid Studioが何かしてくれたらいいなぁと思いつつ、自分で出来そうな事を考えてみた。 Androidアプリ開発は基本的にはAndroid Studioを使って開発する人が多いと思うので、それ前提で考えられるのがいいな。もっといい方法をご存知だったらどなたか教えてください。

ktlint、jvmで動いてそうだから実行が遅いのかな?

参考資料

2018年を振り返る

去年の年末〜今までにかけて、久しぶりに風邪をこじらせてしまって1週間くらい長引いていて、年末年始は殆ど何もしなかった。。。 今更だけど、振り返ってみる。

さて、2018年の目標はなんだっけかとブログを見返してみたのだけど、特に目標は立てていなかった。

参考までに、2017年の振り返りはこちら

mapyo.hatenablog.com

ざっくりいろいろと振り返ってみる

 DroidKaigi 2018での発表

Usb接続するアプリを開発した時に試行錯誤した事

USBのネタで発表した、しかし最新のOSではまた変わっている気がする。 去年はこれでしか外には発表していない。 何気に3年連続で発表できてた事が自慢だったのだけど、 今年はサーバサイドな人間なので今回はCFPを出すこともしなかった。

転職

去年で一番大きな出来事。 Androidエンジニアからサーバサイドエンジニアになった。 USBとか、BLEとか割とニッチなことやってて、やめてしまうのはもったいない感もあったのだけど、スパッとやめてサーバサイドに。 たまにKotlinのコードが恋しくなることもある今日このごろです。

Golang

ガッツリやることになるだろうかと思ってたけど、微妙に嗜むくらいしかやらなかった。 初級者なので、この辺は引き続きガッツリかけるようになりたい。

Node.js

ひょんなことから、Golangよりもこちらをガッツリ触るようになっていた。 Kotlinでずっと慣れてた自分にとっては型が欲しい気持ちが溢れていたが、ある程度慣れてくるとそこまでは思わなくなった。 しかし、ちゃんとテスト書かないとすぐ壊れそうな不安感はある。

雰囲気で書いている。

今までの僕はレスポンス作るためのクラスに一旦マッピングするのが普通だと思ってたけど、 オブジェクトから簡単にjsonが生成できるので、その特徴は生かしてコードを書いていった方がよいような気もしていた。 この辺は割とブレながら書いていたと思う。

今回はJavaScriptで書いてたけど、今度Node.jsで作る時はTypeScriptを使って書いてみたい。

クラウドサービス

AWSGCPを使うようになった。この辺もまだまだ初級者な感じがするので引き続き頑張っていきたい。

昔はベンダーにロックインしないように作る事が正義だと思っていた自分があるけど、 ちゃんとそのサービスの特性を理解して、寄り添う感じで使うのであれば全然ありなんじゃないかなとも思ってきた。 新しく何か作る時はむしろそっちが推奨されそう。 ただ、大きめのサービスになってくるとロックインされないようにするのも必要なのかもしれない。 その辺もうまく含めてマイクロサービス化して作っておくのもいいのかもしれない。

Androidやってて、技術の移り変わりが早いし、ベンダーの意向にめっちゃ左右されるなと思ってたけど、 サーバサイドになったらなったで、クラウドサービスを提供しているベンダーの意向に左右されるし、技術の移り変わりも激しいので、 どこへ言っても一緒という感じ。

 Elasticsearch

雰囲気で使えるくらいにはなってきた。 位置情報検索とか、普通のテキスト検索とかで使ってた。

なんとなくだけど、サービスの立ち上げ期にはこれでがっと作っといて大きくなってきたら別のものに置き換えていくのかなぁという感じがしている。

 AWS IoT エンタープライズボタン

誰でも簡単に使えるけど、使ったり、嗜んだりした。 こういうのを使って、自分ちをめっちゃ自動化したい気持ち。

POっぽい何か

途中、自分では作らないけどアプリの仕様を決める立場も経験した。 ひたすら、文章かいたりしてる時期が続いてた。コードは殆ど書いてなかった。 たまに、Googleスライド編集したり、めっちゃ簡単なアプリのプロト作ったり、調整的なこともしてた気がする。

ブログ

2018年は13件しか書いてなかった。2017年は29件で、段々と減少傾向にある。 今年は少なくとも50件くらいは書きたい。

体調

去年の年末までは殆ど風邪を引かなくて、、年末に久しぶりに風邪を引いてこじらせて今に至る。 インフルエンザになってないのがせめてもの救いだけど、全然風邪を引かない人になりたい。

iPhoneXを購入した

Androidエンジニアということもあってか、Android端末しか使ってこなかったので、iPhoneというものを使った事がなかった。 今は立派なiPhoneユーザ。もしGoogle Pixel 3がもっと早く日本で発売されていれば、そっちにしてたかもしれない。

モバイルSuicaを初めて使ったけど、今ではこれなしでは生きられない体になってしまった。

最後に

という感じで2018年を振り返ってみた。 2017年もいろいろと変化が多かったけど、2018年もいろいろと変化が多かった気がする。 さて2019年はどういう年になるのだろうかー

寝ながらPC作業が出来る環境を作った話

きっかけ

何ヶ月か前に、腰が痛くなったり肩こりからくる頭痛がひどい期間がありました。 家に帰って何かPC作業をやろうと思った時にこのおかげであまりやる気になれず、悲しい気持ちになってしまっていました。

こういう時には普通に休むのが一番ですが、寝転がりながらスマホを触る事は全然苦ではなく、腰痛・肩こりもそこまで感じる事はありませんでした。 なので、寝ながら快適に作業出来る環境が準備できれば最高なのでは?眠くなったら寝れるし。という軽い気持ちでやりはじめました。

寝ながらの作業に求める条件

簡単に片付けたり出したり可能な事

お金をあまりかけずに作り上げられる事

お金をあまりかけずに作れるというのは大事っちゃ大事なのですが、自分専用の部屋などはないので、簡単に片付けたり出したりする事が一番重要です。優先度高。

その1

https://www.amazon.co.jp/gp/product/B00C0LT0LW

とりあえず、あんまり考えず折りたたみ可能な台を買って作業してみようと思いました。 寝転がり、台の上にPCを置いて作業するスタイルです。

しかしながら、キーボード操作のために腕を上げなきゃいけないのが辛いのと、キーボード操作する時に画面がグラグラしてこれでは使えないなと思い断念しました。

動画を見るなどリードオンリーな環境ではお手軽に出来るかもしれません。

その2

qiita.com

枕と布団で頭を少し高くして、膝の上にPCを置いて作業するスタイルです。

そもそも何も新しく買う必要がなくて、これが出来れば最高じゃないか?と思って試してみました。しばらくは問題なかったのですが、個人的にはどうも首の角度が曲がってしまって首周りが窮屈な感じになってしまったのと、若干体を曲げた状態になるので、どうも腰に負担がかかってしまって、椅子に座る時程ではないですが、痛みを感じるようになりました。

やはり、理想は普通に寝た状態で作業出来るのが完璧なのではないか?と思うようになってきました。

その3

https://www.amazon.co.jp/gp/product/B01M6Y3RLIwww.amazon.co.jp

寝ているような姿勢で作業が出来てすごい良さそう!と思って購入しました。

最初はそれなりにいい感じかと思ったのですが、メガネを通してPC画面を見ると文字がどうも小さい。 エディタの文字の大きさを大きくして作業していましたが、毎回大きくしたり元に戻したりする作業がどうもめんどくさかったです。

また、微妙に枕よりも頭の位置を高めに設定しないといけなくて、「その2」で感じていた時と同じ問題を感じるようになって来てしまいました。

それなりによかったですが、ちょっと使いにくいなぁという事で断念。

その4(現在)

多少お金かかってもいいやという事で、以下のものを購入しました。

100均で大きめの洗濯バサミ ec.cando-web.co.jp

分割式キーボードのBarocco MD600 RGB(英字配列・青軸) www.biccamera.com

MD600についてくるのキーボードとキーボードを繋ぐ配線が固くて幅を広げにくかったので長めのケーブル
https://www.amazon.co.jp/gp/product/B0088EIC6O

USBハブ
https://www.amazon.co.jp/gp/product/B00Y27DEVO

マウスを寝ながら動かせるように、トラックボール式のマウス
https://www.amazon.co.jp/gp/product/B00E19UYO8

大きめの洗濯バサミが必要な理由は「その1」で購入したスタンドに角度をつけた時に、PCが倒れてこないようにするためです。 PCを固定できるスタンドがあればそれを購入すればいいと思います。

いい感じに作業するために分割式キーボードを探していたら、危うくキーボードの沼に落ちていきそうになりました。 普段キーボードは英字配列で使っているので、英字配列のMD600をAmazonで購入しようとしたら異様に高い値段で売っていたため、 定価で買えるサイトを探してなんとか見つけました。 しかし、今現在確認したところ、僕が購入した物は既に在庫切れになってしまっているようです。 MD600のRGBはキーボードをキラキラ光らせる事が出来るので最高です。今はOFFにしています。

マウスは普段から会社で使っているものをもう1台購入したのですが、 寝ながら作業するためやはりトラックボール式のマウスが手首を動かさずに出来るので楽な気がします。

これにて、快適に寝ながらPC作業が出来るようになりました。満足です。 作業中に眠くなっても目をつむればいつのまにか眠り、起きれば眠っていた事を忘れたかのように作業を再開できます。 なんかヤバそうですね。

しかし、弱点もいくつかあります。

  • 布団の上で使おうとするとグラグラして心もとないため、床の上で枕だけ使って作業する事が多い。
  • MD600でたまに間違ったキーを押してしまうと、プログラミングモード?になってしまい、解除するために特別なキー操作をしなければならず、作業がストップしてしまう。
  • MD600自体に矢印キーが存在しておらず、別のキーと組み合わせて押す必要がある。かなり押しにくいため、Karabinerを使って別のキーと組み合わせて押すように配置した。
  • ずっと同じ体勢で作業してるので、横向きになって作業したくなる。
  • 準備するのがひと手間かかるので、ちょっとめんどくさい。

などを感じていますが、今の所概ね満足して使えています。 唯一の心残りは、分割式キーボードでMD650が既に出ている事を知らずにMD600を購入してしまったので、もうちょっと検討してから購入すればよかったかもしれません。

このような感じで普段使っています。

f:id:mapyo:20181211095315p:plain

事情をよく知らない人がこれを見ると完全にやばい人ですね。。。

最後に

僕が自宅で快適に作業出来るようにいろいろと試したお話を書いてみました。 人によって自分にあった作業環境は違ってくるため、何か一つでも参考になれば幸いです。

ただ、準備するのが多少めんどくさいので、最近はたまにしか使わなくなってしまいました笑

参考資料

寝ながらPC作業が出来るメガネを買った

まだ使い始めて20分くらいしかたっていないけど、めっちゃいい気がする。

腰が痛くなってきたので、寝ながら作業出来る環境を探していた。

最初にやっていたのはこちら。

https://qiita.com/YumaInaura/items/2cab7c3dd9d6700e4df9

何も道具はいらなくてそれなりにいいのだが、どうも首が痛くなってしまっていた。 なるべく首を曲げずに作業が出来る環境が必要だった。

理想は寝ながら作業出来てなおかつ簡単に片付けが可能な環境を整える事だ。

https://kakakumag.com/pc-smartphone/?id=12144

これが出来れば理想てきなかなぁと思ったけど、分割キーボードをいろいろと悩んでいるうちに時間がたってなかなかきまらなかった。

とりあえず、使いだして30分過ぎてきたけど、なれないせいか、目がシュパシュパしてきた。後は腕をちょっと上げてプログラミングする必要があるので、手が疲れてきた。。。。 そんな今日このごろ。

aws-sam-cliを使ってlocalでLambdaを動かしてみる

 aws-sam-cliをインストールする

github.com

Docker for MacPython 2.7 or 3.6が必要。

Macのデフォルトでは2.7系だったので、一応最新版を入れる

pyenv install 3.6.5
pyenv global 3.6.5
pip install aws-sam-cli

※ドキュメントの方では—userをつけているが、これをつけると~/.localフォルダにsamがインストールされてしまうので注意!普段pip関連使わないからハマってしまったー。

sam init

sam init --runtime go

サンプルを作ってくれる

こんな感じのファイルが出来る。goじゃなくても別の言語してして作ってもOK

$ tree
.
└── sam-app
    ├── Makefile
    ├── README.md
    ├── hello-world
    │   ├── main.go
    │   └── main_test.go
    └── template.yaml

2 directories, 5 files

localで動かしてみる

build

go get github.com/aws/aws-lambda-go/events
go get github.com/aws/aws-lambda-go/lambda
make build

localでLambdaを動かす

# Lambdaに渡す用のイベントファイルの作成
sam local generate-event api > event_file.json

# Lambdaの実行
sam local invoke HelloWorldFunction --event event_file.json

localでAPI Gatewayを使って動かす

# 起動
sam local start-api

# 呼ぶ
curl http://127.0.0.1:3000/hello

所管

デプロイして確認すると、結構めんどくさいから、ローカルでいろいろと試せるのは便利!

参考

qiita.com

dockerの中に入った時にcontrol + pを2回押さないと履歴が表示されないのをなおした

これを見て解決

qiita.com

~/.docker/config.jsonこのファイルの中に以下を追加するだけ

{
    "detachKeys": "ctrl-\\"
}

今まで、なんか動作がおかしいなぁと思って面倒くささを感じてたけど、普通にキーバインドの問題だったのだ。 開発環境を作る時くらいでしか使ってなかったからあんまり気にしてなかったけど、ぐぐってみるもんだなぁ。

転職して3ヶ月が過ぎた。雑感。

気がついたらたってて、たぶん試用期間も終わってた。

前職は車関係の事やってて、現職も車関係。せっかくなので、もうちょっと関わってみたいと思った。

そして、Androidエンジニアからサーバサイドエンジニアになった。 GolangAWS、もしくはGCP


Android、技術の移り変わりが激しく、今年のI/Oでもいろいろ発表されていて、数年たったら浦島太郎みたいな感じになるんだろうなぁ。マテリアルデザインもガンガンアップデートされてるし。余談だけど、社内のデザイナさんが、I/Oでアップデートされた内容をキャッチアップしてて、すげぇ!となった。

I/Oの内容みてたりすると、やっぱりAndroidも楽しそうだなぁという気持ちも湧いてくる。

去年RxJavaがそこそこはかけるようにはなったけど、最近はKotlinのcoroutineでいいんじゃね?というのをチラホラ見かけていて、そのうちRxJavaで作られたものも負債となってくるのだろうか。coroutineはやったり書いた事ないので、よくわからないけども。


サーバサイドはフロント側ほど技術の移り変わりは激しくない気がする。でも、激しいっちゃ激しい。 そして、クラウドサービスの進化は著しい。AWSGCPは毎年毎年新たなサービスが発表されている。 そもそも、サーバサイドは仕事としてはオンプレでしか経験がなかったのでキャッチアップしていかねば!


出社時間は裁量労働制なので、基本的には自由だし、基本的には出社だけどたまに家で作業している人もいる。

入ったタイミング的にいろいろと仕様を決める時期だったせいか、コードを書く時間がそれなりに減ってしまったので、1日1コミットくらいはやっていこうという気持ちで、雑にGolangのサンプルをひそひそと書いていってる。

https://github.com/mapyo/GolangSample

あまり外部の会社の人と仕事で話す機会がなかったけど、最近何度かあって、それなりに名刺交換させていただいたけど、慣れてないせいか、顔と名前が中々覚えられない。。。


自分が知らなかったり、触った事ない技術をキャッチアップしていって、○○完全に理解した。いや、やっぱり全然理解してなかった。みたいな繰り返しはやっぱり楽しい。

という感じの雑感をつらつら書きました。書いてから見直してみると、めっちゃ見にくい。。 ということで、渋谷で働いています。

Delight and Impact the World!