とあるRailsエンジニア 稲浦悠馬 最近の学習や再就職活動のまとめ (2018年4月前半) #Github や Google 翻訳 #API や #python や #JSON #jq などを触っていた

# プチポートフォリオ的な

とでも言ったら良いんだろうか。つらつらと書いていたらそのぐらいの大きさになってきたので、最近エンジニアとして学んだことを共有するよ。

# やったこと

- Github ISsueに特定のラベルをつけておくと、Googleで英語翻訳して新しい Github Issue を作成し、
- Twitter でツイートすると、1分間隔で更新チェックして Googleで英語翻訳して、別アカウントでツイートを作成する
- Twitterでセルフリプライのチェーンの最後の1個のURLを指定すると、一番上のツイートまでさかのぼって MarkDown化して、Github ISsue にブログ的なまとめを作るスクリプト
- 同じように Slackのチャンネル履歴から MarkDown化 + Github issue 作成までやったり

などなど。

Zapier でやっているようなことを、自サーバーでやりたかった。(Zapierに無限にタスク数とお金を吸い取られていくので)

これだけ読むと簡単なように思えるけれど、全てのプログラミングやアプリケーション開発と同じように、見積もりよりもずっと道のりは長かった

# Github issue 翻訳のイメージ

`./all.sh` ってやつを叩くだけでもう本当に全部やってくれるよ。これもサーバーで cron で回す予定。

# 日本語の ISsue 二個に `en-translate` というラベルが付いている

![image](https://user-images.githubusercontent.com/13635059/56029750-0ee57480-5d56-11e9-9659-4c43dfd72319.png)

# 手元でコマンド一発！

![image](https://user-images.githubusercontent.com/13635059/56029641-cded6000-5d55-11e9-919f-d45fdd21fcd2.png)

# 英語の Issueが二個増えて、元のIssueからは ラベルが外れているのが分かる

![image](https://user-images.githubusercontent.com/13635059/56029776-1f95ea80-5d56-11e9-9c46-a69c73b139eb.png)

# 翻訳結果はこんな感じ

Markdown やら HTML を持ったままの翻訳処理が、やや面倒だったのだよね

![image](https://user-images.githubusercontent.com/13635059/56029846-5409a680-5d56-11e9-8198-f24407254f85.png)

![image](https://user-images.githubusercontent.com/13635059/56029826-481de480-5d56-11e9-9dd3-7e52aa5b3973.png)

# ちなみにこの記事本体の英語翻訳結果はこちら

- Zapierだと 翻訳に1000文字の制限があるんだけど、自前で API を叩けば再現なしに翻訳できるのがいいね
- Google Translate API の料金も文字数当たりの課金で、そんなに高くなかったと思うし、料金上限もつけてコマ目に料金確認もしているから大丈夫さ

[A Rails engineer Toma Inaura Summary of recent learning and re-employment activities (early April 2018) · Issue #1224 · YumaInaura/YumaInaura](https://github.com/YumaInaura/YumaInaura/issues/1224)

![image](https://user-images.githubusercontent.com/13635059/56031659-0f343e80-5d5b-11e9-8600-5fd49d7d5076.png)

# 残りのりぷれーす

その先の Medium Qiita Twitter に投稿するところはまだ Zapier にまかせているけれど、この置換も時間の問題だと思うよ、やる気と時間さえあればね。

# Twitterの「Google翻訳でセルフリプライの追撃」

- なにかツイートすると、1/10ぐらいの確率で、自動翻訳が「追撃」してチェーンするようにしてみたよ。全部だとさすがにノイジーだからね。
- 本当は他の人のタイムラインを汚さないように、自分のメインアカウントじゃなくて、翻訳専門の別アカウントから追撃させたかったんだけど、APIの仕様的に禁止されてるっぽいんので諦めたよ

![image](https://user-images.githubusercontent.com/13635059/56030095-fb86d900-5d56-11e9-958f-bf40c51524c7.png)

https://twitter.com/YumaInaura/status/1116494912260755457

# 別アカウントでの英語翻訳専用アカウント

これも Zapier でやっていたことを Replace したよ

![image](https://user-images.githubusercontent.com/13635059/56030155-2113e280-5d57-11e9-9b49-6a7d0887d557.png)

https://twitter.com/YumaInaura2nd

# 学んだこと -> python

- 「Ruby では簡単にできるあれ」は、pythonではどうやるのだよ！ といろいろ初歩から探していた
- ほんの初歩的なことでも、何か分かれば Qiita に記事をアウトプットするなどしていた
- python という言語そのものの特質ではあるが、論理的にインデントを書いていく感覚が気持ち良かった

# 学んだこと -> jq コマンド

- なかなか便利ではあるのだけれど、やはりコマンドはコマンドなので、やりたいことをやるために、かなりコマンドが複雑化しそうなケースや、そもそもやり方が分からないこともあった
- コマンドはあくまでコマンドと考え、ちょっと複雑な json 加工とかは python などのスクリプトでやった方が良いと思った

# 学んだこと -> 標準入出力の取り回し

- シェルやpythonスクリプトもそれぞれ得意なこと、苦手なことがあるので、全て標準入出力で受け渡しして、結果をリレーさせていく方式にさせた
- Linux哲学的かどうかは分からないが、ひとつのスクリプトがすることはなるべく、ひとつに収まるように努めた
- 最初は環境変数やらコマンド引数やらも駆使していたが、最終的には全てを JSON で受け渡しした方が、ずっと取り回しやしやすいだろうという結論に至った

# 学んだこと -> 全てを1ステップごとにlogに残してみる

- 1個のスクリプトの結果は tee コマンドなど 何らかの1ステップごとに全てを json の log に残しておき、次のスクリプトはその log を標準に入力に受け取って、また次の処理をするという仕組みにした
- たとえば github issue のリストを全部とってきて json をログに残す、その json から特定のラベルがついている issue だけを jq コマンドで絞り込んでまた新しい json をlog ファイルに残す‥など
- こうすることで何か1個のステップで問題が起きても、処理全体を走らせずにデバッグなどができるし、全てlogに残っているので参照も簡単になった

# 反省 -> 最初から docker を使えば良かった

- python の 特定バージョンを入れたり、gcloud を入れたりするのに、わりと手間取った (Centos)
- 短い Dockerfile を書くだけで全部できた
- gcloud コマンドを叩いて Google 翻訳の TOKEN を得るところだけを docker でやっている

# 考えていたこと -> 「何がどこまで済んだか」の扱いが難しい気がしていた

- 「ここまで処理したよ」という印を残すために、DB使ったりしたくないよなあと思っていた、また環境が複雑になるし。かといって独自に file に記録を残したりするのも辛そうだし。
- たとえば Twitetr の翻訳であれば、cron で1分ごとにスクリプトを回す方式にした。
- Twitter で Timeline API を叩いて それを 現在から1分前までの unixtimestamp で絞り込めば、結果的に何もデータを残したりすることなく、全てのツイートを翻訳出来たりする。
- Githubの場合はラベルのつけ外しによって「処理済み」を扱えるのでそうした。

# 学んだこと -> Git の commit の積み方

- あくまで僕の個人開発では commit に名前をつけたりする必要さえないことに気付いた、見返さないし
- コミットメッセージさえつけるのが面倒なので `git ap` 的なエイリアスで一瞬で新規コミットを詰めるようにして、このおかげで本当に開発のテンポが心地良く保てるようになった、コミットメッセージを考えることが本当に小さなひっかかり、ネックになっていたのだなあと思った
- というわけで僕のレポジトリのコミット状況はこんな感じになっています

![image](https://user-images.githubusercontent.com/13635059/56029487-6b945f80-5d55-11e9-8f1c-235d663d141e.png)



# 雑感

- 自力で色々と実装したけれど、Zapier的なやつを自サーバーに立てられる API フレームワークとかもしかしてあったりしないんだろうか、とは思いつつ作業していた
- 色んなAPI叩くだけだし簡単でしょ！と思いつつなんだかんだと設計が大きくなっていた気がするが、特に後悔はしていない


# 記念写真 - exe

- 何か特定のことがやりたい

https://github.com/YumaInaura/YumaInaura/tree/e88825b51ae7633d3474f201e0f8e6aa437f2e4f/api/exe/github-translate

![image](https://user-images.githubusercontent.com/13635059/56027081-5c5ee300-5d50-11e9-8cd8-26f1032dd0c2.png)

# 記念写真 - lib

- 汎用的な動作をするものは、主にこちらに python スクリプトでまとめてある
-  (Github に Issue を作る スクリプト、編集するスクリプトなどなど)

https://github.com/YumaInaura/YumaInaura/tree/e88825b51ae7633d3474f201e0f8e6aa437f2e4f/api/lib

![image](https://user-images.githubusercontent.com/13635059/56027177-83b5b000-5d50-11e9-9825-d3adbe8f62bb.png)

# その他の出来事

- 去年年末に買ったばかりの MacBookAir2018のディスプレイがたまにちらつくので本当にひやひやしていた
- 人には「それはやばいやつ」「直りにくいやつ」と言われてちょっと諦めかけていた
- Appleサポートに連絡して SMC のリセットやらセーフモードでの起動などやら試したところ、今の所再発していない様子なのでちょっとほっとしている

Appleサポートの東北美人のRieさんありがとう！

![image](https://user-images.githubusercontent.com/13635059/56030477-e2325c80-5d57-11e9-8fc6-7192da5e6172.png)

https://twitter.com/YumaInaura/status/1115089973902888961?s=20

# 退職と再就職活動 - 近況報告

- 本当に就活のためにスーツを着たり歩き回ったりする途方もないコストに絶望していた本当に本当にこれは。
- Twitter 経由で仕事のお誘いなどいただいたりして、就職活動さえせずに次の仕事が決まりそうな気がしている。
- とあるスタートアップで Ruby on Rails 開発に一週間だけ参加させてもらったりした。最初はあたふたとしたが、
- Wantedlyに登録したり、Twitterをフル活用したり、なんとかremoteしか使わずに新しい仕事が探せないかと試行錯誤していた

![image](https://user-images.githubusercontent.com/13635059/56029048-82868200-5d54-11e9-9951-1e0e29c3873d.png)

# Twitterすごいね

- 有給休暇消化期間中で暇もあるので、ひたすらプログラミングするかたわら、Twitterで遊んだり、プログラミングやフリーランスの知見を深めたり、リモートワークの情報を調べたり、一般的な社会全体の問題などについてツイートしていたよ
- プログラミング初心者、勉強中の人とも絡んだりして、プログラミングの原始衝動をピュアな気持ちで思い出していたよ
- さらにそれを Github ISsue Qiita Medium などにまとめるためにも API やらを学習したし、ずっと触りたかった API をガリガリと触れてそれも良かった
- いろいろな人と話していると案外、寂しくないし、本当に様々な知見が得られて、素晴らしい気がしているよ、まさかTwitter経由で仕事が決まろうなんてことはまるで思っていなかったけれどね

![image](https://user-images.githubusercontent.com/13635059/56030723-83b9ae00-5d58-11e9-9209-3a1cbd5729b3.png)
![image](https://user-images.githubusercontent.com/13635059/56030721-83211780-5d58-11e9-977d-80c0ea3bfc56.png)
![image](https://user-images.githubusercontent.com/13635059/56030725-86b49e80-5d58-11e9-9204-45546118ee4f.png)

# プログラミングの原始衝動を思い出していたよ

- 自分が思うままに気ままにプログラミングをすることが、ここまで爽快なことだとは思わなかったよ
- フロントサイドに苦手意識があったけれど Vue.js  なども触って、恐れるほどのことではないような気がしてきたし、新しい業務を始めるにしても鋭意新進気鋭的に意気揚々と取り組める気がしてきたよ
- 春がきて自分の手もよく動くし、MacBookAir2018のバタフライキーボードにも本当に手が馴染んできて、もう彼なしでは生きられないと思ったよ
https://twitter.com/YumaInaura/status/1110489119011074048

![image](https://user-images.githubusercontent.com/13635059/56031072-6802d780-5d59-11e9-8daa-bdef649c8ade.png)

# リモートワークは生産性を3倍ぐらいにするんじゃないかと思い始めてきたよ

- 前職はオープンオフィスで音も人通りも多いし、いかに集中力を担保するかというのが課題だったんだけど、リモートワークであればそれが完ぺきにできるんじゃないかと思っているよ
- 自分の意志なんかまるで関係なく、自分の好きな場所にいたり、心地良い環境にいることの果てしない生産性向上の効果をしみじみと感じているよ
- 通勤時間もほぼゼロになることが、どれだけ時間と注意力の担保に寄与するかわからないぐらいで、リモートワークの難しさの溝を有り余るぐらいに埋めておつりまで出るのではないかと感じているよ




# Original by Github issue

https://github.com/YumaInaura/YumaInaura/issues/1223








<!-- Update From Qiita API -->

# チャットメンバー募集


何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。

https://line.me/ti/g2/eEPltQ6Tzh3pYAZV8JXKZqc7PJ6L0rpm573dcQ





# Twitter


https://twitter.com/YumaInaura


<!-- Update From Qiita API -->