2018年を振り返って
なんで振り返るのか
2017/09 に SIer から ベンチャー企業のエンジニアになり、2018年はそのベンチャー企業で過ごした1年だった。
大きくまとめると楽しくハッピーな1年だったが、なにかを成し遂げられたかというと、そうでもない1年でもあった。
また消化不良な感覚があって、その感覚を具体化したくてこの記事を書こうと思った。
1月
娘が生まれた。前日は大雪だった。里帰りしている妻と電話で、こんな雪の日に出産になったら大変だね、と話していた翌朝に娘が生まれた。フラグにも程がある。
あれこれと相談した結果、妻が娘を連れて戻るのはゴールデンウィーク前となった。
言い換えると、私が私のために時間を自由に使えるのは4月末までということだと思った。
2月
いずれ自分の時間が制限されるなら、限られた時間を最大限に活用する必要がある。なので生産性にこだわって仕事をすることにした。
当時、タスクはすべて見積もりポーカーでポイントをつけていたので、Sprintごとに消化できたポイント数を増やすことに拘った。
先に書くと、これは失敗だった。
消化したポイント数を意識すると、ポイント効率をどうしても考えてしまう。つまり、同じポイントなら(自分なら)短時間で完了できるものを優先してしまった。もちろん、Sprintごとにやるべきタスクと優先度は決まっているのだけど、そのタスクが終わって空き時間ができると、ポイントを効率よく稼げるタスクを進めてしまいがちになった。
結果、自分にとってチャレンジングなタスクには手を出さなかったので、何の勉強にもならなかった。経験を食いつぶしているだけなので、消化できたポイント数がいくら増えたところで、自分の成長を実感することはなかった。
この結論に気づいたのが4月で、以降は消化ポイント数を意識するのをやめた。
3月
作業効率性を上げるために hub コマンドを活用し始めた。具体的には プルリクエストの作成は hub コマンドで行うようになった。今でもそう。他の機能は使ってない。
社内勉強会を開催した。Ruby on Rails 製の OSS のソースコードを読んで「なんだコレ」する会。題材はGitLabにした。新規メンバーが増えたこともあり、コミュニケーションを取ることも兼ねて数回行った。
今では自然消滅したが、またきっかけがあれば開催しようと思っている。
この月はまだポイント消化数に拘っていたので、結果、ベストスコアを叩き出した。
4月
esa に日報をつけていたのだが、日に日に内容が薄れていることを自覚してもやもやしていた。
仕様の検討や実装で分かった点・気になった点などをメモしたいけど、いちいち esa を開いてまとめながら作業するのも面倒だし、後から思い出しながらまとめるのはもっと面倒だったので、Slackに times-yasuhiroki
チャンネルを作って分報を始めることにした。分報で雑にメモして、そのメモを日報にまとめるスタイルにした。
分報で悩みをボヤくとアドバイスをもらえたり、なんでもないような呟きにツッコミがもらえたりと有益だった。
分報は今でも、当時ほどの量はないが続けている。
4月末に妻と娘が戻ってきた。
生活が一変した。
5月
生産量が目に見えて減った。そもそも出社時間が短くなったし、自宅で仕事する時間も激減した。勉強する時間はほぼゼロになった。 ただ、自分の時間が減ったのは確かだが、それでも時間が全くないわけじゃなかった。平日は夜にアニメを観る時間はあったし、休日は昼寝をする時間があった。要するに時間の使い方の問題なのだけど、アニメも昼寝も削る気にはなれなかった。
この頃、システムの小規模なリアーキを行った。それまで Rails の SuckerPunch で行っていた非同期を AWS SQS で Message にして ElasticBeanstalk の Worker で処理するように変更した。非同期処理は SQS 経由で行うシステム構成へ変更する足がかりとなった。この実装は少々時間がかかったが楽しかった。
現状の問題を解決する新しい仕組みを検討・導入するのは楽しい。
また、サービスの使われ方の調査やKPI測定のために Jupyter を使い始めた。pandas
はすごく便利。
6月
AWS Summit の Startup 向けコーナーで 15分の発表をした。内容はAWSリソースの構成管理をテーマに、CloudFormation の CI/CD を考えるもの。 CIで使えるツールの例として cfn-lint
を紹介したのだけど、発表した後に聞いたセッションで cfn-python-lint
の存在を知り「マジかよ...」と悲しい思いをした。すぐにインストールして、やがて vim の ale.vim
で動くように対応して Qiitaに記事 も書いた。
この頃から、たまにリモートワークをするようになった。仕事に集中できるかどうかは、タスクと家庭状況によってまちまち。少なくとも仕事の方は、仕様が決まっていると作業が捗りやすく、一方で、相談が必要な作業は滞りがちだった。
もともと、口頭のやり取りで仕様を相談しその結論が文章化されるのはプルリクになってから、という傾向が強かったので、リモートに対応するには情報共有の文化の面で課題があった。
このリモートワークにおける情報共有の課題は少しずつ改善されている。特に GitHub で仕様を議論するルールになったことで情報共有漏れは解消された。
一方で、リモートワークしている人がどういう状況か見えない問題もあって、私はなるべくSlackで発言したりリアクションすることで「オンラインですよ」アピールをしているのだけど、そのせいで作業に集中できていない面もある。ビデオチャットを垂れ流すのが良いのかなーとは思うけど、自主的にならともかく、ルール化すると女性がノーメイクでラフにリモートワークしづらくなるのでは、などと余計なことを心配したりしている。余計なお世話な自覚はある。
7月
ebisu.rb に参加し、RubyやRailsのキャッチアップが全くできていないことを思い知り、週刊Railsウォッチを読むことにした。
Androidのタスクを少しずつ進めることにした。業務経験はあったがほとんど忘れているので、簡単な機能やバグ修正だけ手伝う感じ。今でも同じ距離感で開発に参加していて、GCMからFCMに乗り換えなど、サービスの機能とは少し離れた部分にコミットしている。
また、リモートワークにて情報共有漏れによる時間ロスが発生し、対策として毎朝 slack でその日の作業予定を報告する運用を始めた。これは今も続いているが、若干、形骸化しているので、有効活用する仕組みを考えるか、廃止を含めて考え直すかしたい。
8月
体調が芳しくなく、長期休暇もあって生産量が大きく減った。開発以外のタスクばかり進めて何も生み出していないような気分になっていたが、後半は持ち直したような気もする。
9月
8月と打って変わって生産的だった。CSの仕組みを変更して自動化したり、 go でごにょごにょしたり、Rubyの正規表現を調べてLTしたりした。
久々に飲みすぎて視界が真っ白になった。なんとか帰宅できたが、いろいろとギリギリだった。
10月
かなりレジェンドな感じだったある実装がいよいよ限界なのでリファクタを始めた。このリファクタは気に入っていて、リファクタの規模を抑えつつ、スケールしやすくエラー時の検知も分かりやすくリトライ可能な実装になったので嬉しい。ただし妥協点もあって、この妥協点がいずれ負債になる未来も見えている。
NHK筋肉体操を始めた。今も続けている。二期があるとのことで楽しみにしている。
11月
サービスの課題や新機能の効果測定のためにデータを調べる機会が増えた。別に依頼されたわけじゃなくて、自分が気になるから調べていたのだけど、もっと早くからこの習慣を身に着けておけば良かったと思っている。
Ebisu.rb で rb コマンドについて発表してきた。スライド無しで README に書いておいたコマンドを実行しながら説明する実演スタイルで発表したが、そこそこ良い反応が得られてよかった。個人的にも楽しかったので、実演スタイルの発表は今後も挑戦してみたい。
VimConf2018 に行ってきた。最高だった。最高に最高だった。
12月
AWSのキャッチアップがまるでできていないと気づいたので、 AWS Black Belt Online Seminar を聞くことにした。1時間でたっぷり情報が得られてとても良い。継続的に視聴していきたい。
CircleCI のハッカソンに参加して reviewdog 用の orb を作った。こういう成果物が残るのは良い。
年末に体調を崩した。もともと私は年に一度、冬の季節に高熱を出す習慣があるんだけど、今年は吐き気もして最悪だった。結局年明けまで回復しきらず、散々な年末年始だった。
まとめ
月ごとに振り返りながら思ったことをリスト化
- インプットが足りていない
- 年末に意識し始めたけど、インプットが足りてない
- 時間というよりインプットの質の問題な気もする
- アウトプットが足りていない
- せっかく読んだ本・スライドの内容をアウトプットしていないので自分の血肉なった感覚がない
- コンテンツのように消化しておしまいな傾向があるので改めたい
- 短い期間でふりかえりしたい
- 意外とやってたり、やってなかったりすることに気づける
VimConf2018 に行ってきた
行ってきました。最高でした。来年も行きたい。 スタッフの皆様お疲れ様でした。VimConfをたっぷり満喫できたと思います。
以下、感想メインでつらつらと。
LINK
VimConf2018 Official: VimConf 2018
スライドのリスト: VimConf 2018 – VimConf official blog
チケット
販売開始時刻にリマインダーセットして速攻買った。個人スポンサーも買った。
もともとmattnさんの発表が聞けるなら買わねば...と思っていたが、Bramさんが来日するとなればそりゃリマインダーセットするよね。
個人スポンサーも買ったのは、応援の意を込めて。
予習
vimconf2018.swp で、Bramさんのvim25周年時の動画があると知ったので見ておいた。
Vim 25 presentation by Bram Moolenaar on 2016 November 2 - YouTube
この動画は Vimの 25年の歴史を振り返る内容で、同時に Bramさんの歴史を振り返るものでもあって、私の中で、今まで雲の上の未確認な存在だったBramさんが、雲の上だけど存在ははっきり分かった存在に変わって、すごく良かった。
また、動画にはBramさん本人は映ってなくて、これがかえって、VimConf2018で本人に会える楽しみを増幅させてた。あの声の主に会える、みたいな。
Keynote 1
まずは mattn さんのキーノート。
vim-jp の話とNew Featureの話。
vim-jp によって日本の vimmer の知見が蓄積されていくのは本当に良い話。
New Feature の話では、VimScriptでNUL文字を扱えないことを説明するために、実際に Vim を開いてコマンドを入力して見せてもらえたのが最高だった。このライブ感がたまらない。
Keynote 2
そして Bramさんのキーノート。
最高だった。
Plugin のために今までどういうことをしてきて、これからどういうことをしようと思っているかの話。
Autocommand を追加し (Vim 4.0) Vim script を追加し (Vim 5.0) Plugin の概念を追加し (Vim 6.0) パフォーマンスに懸念が出たので autoload を追加し (Vim 7.0) 将来的にはマルチスレッドやpycのような中間言語にコンパイルするのが良いかもしれない、という感じ。
そして Plugin Manager の提案。個人的には、プラグイン管理はvim本体で持たなくても良いのではという気持ち。
あとはアンケートを取ってみたら、popup window と store properties with text の要望が多かったとのこと。properties は plugin 作ってる人たちからするとめちゃめちゃ欲しいだろうな、と聞いてて思った。
LSP は Bramさん的にはあんまりな感じだったけど、Vim が LSP に対応したらアツイ。LSP がプログラミング言語界隈でどれくらい浸透しているのかよく知らないけど、考え方は好きなので広まって欲しい。Vimが対応することでよりLSPの輪が広がると思う。
いやー。最高だった。
お昼
すきやき弁当がうまかった。
すきを見てBramさんと握手した。Vimが好きだとひたすら言った。幸せだ...。
午後
ほぼぶっ通しで発表を聞き続ける。スライド見続けるのでめちゃめちゃ目がしょぼしょぼした。目薬持ってくれば良かった。
発表の中では、 :Termdebug がインパクトあった。GDB使ったことなかったので使い方のデモとしても面白かったし、それが vim の中で完結されていたのが良かった。まさに vim を開発するための vim という感じ。
今どきのプラグインの作り方も良かった。スライドも発表も分かりやすい。Vital.vim で job/channel を Promise ぽく扱えるようになるのは良い。使ってみたい。
あとは vim の標準の補完機能もうちょっと使い込んでみたくなったなあー。<C-n> しか使ってないからなぁ。とりあえず dict は有効にした。
来年はLT出てみたい。何がいいかなぁ。
懇親会
英語で話す機会があった。これが国際カンファレンス...!
なんでVimを使ってるんだ、という話だったんだけど、私がVimを使うきっかけはEmacs使いの先輩への対抗心で、それを英語で伝えられたかというと伝えられていない。まず先輩を英語で何ていうか分からなかったのでFriendって言った時点でもう間違ってる。むずかしいなー。
というか、Vim自身に理由がないので説明しても面白くなくて、代わりにVimを使い続けている理由を話せば良かったのではと帰宅中に思った。
ちなみに相手の方は左手の小指が内側に曲がっていて、この指じゃEmacsは使えないだろ? みたいな話だった。まさかそんなパターンがあるとは...。
あと、Vim を tmux のように attach/detach したいという方もいた。それができれば tmux がいらなくなる、と。私は tmux + vim で満足してるのでそんな発想はなく、新鮮だった。これができるならログインシェルを /bin/sh
から /usr/bin/vim
にできたりするんだろうか。ちょっと違うか。
VimConf参加者のブログを読み漁ってたら、この話をしてたのってもしかして江添さんだろうか?もしそうなら、ばったり著名人と同じ輪の中で話すことがある。これが国際カンファレンス...!
家の事情があって途中で帰宅したのが残念。お酒も飲みそこねた。SAKE飲みたかった。やむなし。
また来年も参加したい。
GitHub の branch protection は force push を防いでも push は防がない
push も防ぐものだと勘違いしてた。
git push
# push できた $ git push Enumerating objects: 7, done. Counting objects: 100% (7/7), done. Delta compression using up to 4 threads Compressing objects: 100% (3/3), done. Writing objects: 100% (4/4), 407 bytes | 407.00 KiB/s, done. Total 4 (delta 2), reused 0 (delta 0) remote: Resolving deltas: 100% (2/2), completed with 1 local object. To github.com:yasuhiroki/iypymtiycaa 98b74d8..b6eb250 master -> master
git push -f
# force push はできない $ git push -f Enumerating objects: 4, done. Counting objects: 100% (4/4), done. Delta compression using up to 4 threads Compressing objects: 100% (2/2), done. Writing objects: 100% (3/3), 266 bytes | 266.00 KiB/s, done. Total 3 (delta 1), reused 0 (delta 0) remote: Resolving deltas: 100% (1/1), completed with 1 local object. remote: error: GH006: Protected branch update failed for refs/heads/master. remote: error: Cannot force-push to a protected branch To github.com:yasuhiroki/iypymtiycaa ! [remote rejected] master -> master (protected branch hook declined) error: failed to push some refs to 'git@github.com:yasuhiroki/iypymtiycaa'
slackcat で iconemoji を設定できるようにした
以前、 slackcat で Slack に分報を流すようにした。
slackcat
だと投稿者のアイコンを変更できなかったので stdbuf
を使って prefix を挿入していたが、よく考えたら slackcat
を自分で改造して iconemoji
を受け付けられるようにすれば良かった。
プルリクも出した。
ただこの実装方法だと未対応の他のオプションにも対応したくなった時、関数の引数が延々と増えてしまう未来が見える。
ひとまず、私の slack
コマンドは次のようになった。
-i
オプションで投稿者のアイコンを絵文字で指定できる。
#!/bin/bash set -e which slackcat >/dev/null || { echo "required slackcat"; exit 1; } if [ $# -gt 0 ]; then echo "${*}" | slackcat -i ":yasuhiroki:" -c "${MY_SLACK_CHANNEL:-times-yasuhiroki}" -u "${MY_SLACK_USERNAME:-yasuhiroki}" --stream else cat | slackcat -i ":yasuhiroki:" -c "${MY_SLACK_CHANNEL:-times-yasuhiroki}" -u "${MY_SLACK_USERNAME:-yasuhiroki}" --stream fi
vim上で git rebase -i が動かない
解決はしたが、原因は不明。
解決方法
sequence.editor
を設定する。 core.editor
ではだめ。
$ git config --global sequence.editor $(which vim)
環境
- MacBook Pro
- High SIerra
- iTerm2
- zsh 5.5.1 (x86_64-apple-darwin17.5.0)
- MacVim
調査
vim 上からコマンド打って rebase できなくなった。
$ vim Created autostash: dcc6d6b HEAD is now at fde30be fixup! fea /usr/local/Cellar/git/2.18.0/libexec/git-core/git-rebase--interactive: line 277: /Users/a10lab-yasuhiroki/go/src/github.com/yasuhiroki/slackcat/.git/rebase-merge/git-rebase-todo: Permission denied Applied autostash. Could not execute editor
.git/rebase-merge/
ディレクトリは存在しない。
$ ls .git COMMIT_EDITMSG ORIG_HEAD description index logs/ packed-refs tags HEAD config hooks/ info/ objects/ refs/
ディレクトリを作ってみると、zsh の VCS_INFO が怒る。
$ mkdir .git/rebase-merge VCS_INFO_git_getbranch:25: no such file or directory: .git/rebase-merge/head-name
とりあえず rebase してみるも失敗。
$ vim It seems that there is already a rebase-merge directory, and I wonder if you are in the middle of another rebase. If that is the case, please try git rebase (--continue | --abort | --skip) If that is not the case, please rm -fr "/Users/a10lab-yasuhiroki/go/src/github.com/yasuhiroki/slackcat/.git/rebase-merge" and run me again. I am stopping in case you still have something valuable there.
/usr/local/Cellar/git/2.18.0/libexec/git-core/git-rebase--interactive
の先頭で set -xv
してデバッグログ出す。
...前略... ++ /Users/a10lab-yasuhiroki/go/src/github.com/yasuhiroki/slackcat/.git/rebase-merge/git-rebase-todo /usr/local/Cellar/git/2.18.0/libexec/git-core/git-rebase--interactive: line 278: /Users/a10lab-yasuhiroki/go/src/github.com/yasuhiroki/slackcat/.git/rebase-merge/git-rebase-todo: Permission denied gettext "Could not execute editor" ++ gettext 'Could not execute editor' ++ printf %s 'Could not execute editor' + die_abort 'Could not execute editor' + apply_autostash + test -f /Users/a10lab-yasuhiroki/go/src/github.com/yasuhiroki/slackcat/.git/rebase-merge/autostash + rm -rf /Users/a10lab-yasuhiroki/go/src/github.com/yasuhiroki/slackcat/.git/rebase-merge + die 'Could not execute editor' + die_with_status 1 'Could not execute editor' + status=1 + shift + printf '%s\n' 'Could not execute editor' Could not execute editor + exit 1 シェルが値を返しました 1 続けるにはENTERを押すかコマンドを入力してください zsh: suspended vim
ログをあちこちねじ込んで print デバッグしてくと git var GIT_EDITOR
の戻り値がおかしかった。
手元でやると、
$ git var GIT_EDITOR /usr/local/bin/vim
vim上だと、
:!git var GIT_EDITOR →何もなし
なんでだろう。git config で core.editor は設定済みのはずだが...。
vim上で !git config -l
してもちゃんと定義されてる。
!git var -l
すると、 GIT_EDITOR が空になってる。
腑に落ちないけど、 sequence.editor
を設定すればそっちから読み込んでくれそうなので設定してみる。
git_sequence_editor () { if test -z "$GIT_SEQUENCE_EDITOR" then GIT_SEQUENCE_EDITOR="$(git config sequence.editor)" if [ -z "$GIT_SEQUENCE_EDITOR" ] then GIT_SEQUENCE_EDITOR="$(git var GIT_EDITOR)" || return $? fi fi eval "$GIT_SEQUENCE_EDITOR" '"$@"' }
$ git config --global sequence.editor $(which vim) $ git config --global -l | grep editor core.editor=/usr/local/bin/vim sequence.editor=/usr/local/bin/vim
無事動くようになった。
cookpad.apk #1 に行ってきた
2018/08/21 に開催された cookpad.apk #1 に行ってきました。 もともと社内向けのイベントとして企画していたけど、別に外部に開いても良くない? となって開催が決定したとのこと。
楽しかったし美味しかったです。
楽しかったー!
— yasuhiroki (@duck_yasuhiroki) 2018年8月21日
ご飯美味しいし発表も種類が多くて面白いし懇親会でリリース自動化について詳しく聞けたので良かった。
アプリの公開範囲は、うちは規模がまだそこまで大きくないし週に一回リリースを目指しているのでしばらく100%のままで良さそうだなぁ。
#cookpad_apk
以下、メモ。
ReactNative for Android について
新規事業にReactNativeを採用してどうだったか、という話。
ReactNativeが向いているのはどんな環境か、採用してみたメリットはどの辺か、辛いポイントはどこか、の紹介。
その場でアプリをインストールして使ってみたけど、言われなきゃ ReactNative とは思わなかったかもしれない。言われてみれば何となくWebっぽいような気もするけど気のせいな気もする。
私はどっちかというとWeb側の人間なので、JavaScript(and TypeScript) に詳しくて、Android/iOSの有識者がいて、デザイナーも一緒に実装できる状態なら、ReactNative を選択するのはアリだと思う。ReactNative のマルチプラットフォーム対応の恩恵をフルに受けられる状況ならなおさら。
ただ、もしAndroid/iOSを両方に精通しているエンジニアが揃っているなら、ネイティブアプリで作った方が良いと思うし、そっちの方が理想的だとも思う。
クックパッドアプリのマルチモジュール化への取り組み
モノリシックな状態では、新規機能が使えないしビルドが遅すぎる...モジュール化だ! ということでマルチモジュール化への取り組みについてのお話。
マルチモジュールを Feature単位で進めていった、というのが印象に残った。
たしか、Feature単位で開発チームが分かれているんだったっけ...? それなら合理的な気がする。
ML Kitでカスタムモデルを使うまで
タイトル通り。
やってみた系の発表は自分でもやってみないと面白さが半減なので、(たぶん)口頭で紹介されてた firebase のサンプルを clone して試してみている。
https://t.co/pNzE3IALZJ
— yasuhiroki (@duck_yasuhiroki) 2018年8月21日
#cookpad_apk
まだ firebase のプロジェクトを作ったままなのでやらねば。
AndroidXとAOSP
Support Library 改め Android X と、そのソースコードを読むために AOSP にアクセスしてみよう、あわよくばパッチを送ろう、というお話。
AOSPの見方が説明されていて、レビューの様子とかcommitのルールとかそうなってたんだなーと興味深かった。
パッチは @NonNull
とか狙い目とのこと。
AOSPのソースコードは容量食うから削除したんだよな...。ノートPCを新しくする時はケチらず容量の多いタイプにしたい。
Google Playアルファリリースを自動化した話
Google Play alpha release の自動化の話。面白い。
もともとのリリースは半自動化されていて、最後に apk を upload してリリースするところが手動だったのだけど、それも自動化したとのこと。私もそれ取り組もうと思っていたところだったので、一つの事例としてすごく参考になった。
自動リリースする際は、バージョン名をどうするかが課題だと思っていたので、懇親会で詳しくお話が聞けたのも良かった。年・週・リリース番号、みたいな機械的に取れる値でインクリメントしていく案は良さそう。
人がスケジュールを管理するのではなくてスケジュールによって人が動くようにしたい、というのはすごく共感する。
もちろん無茶なスケジュールを押し付けられて苦しむ、という意味ではなくて、定期的にリリースできる環境を作っていくという意味なので、私も目指したいなと思っている。
Google Play alpha 機能を選んだ理由 (TestLab によるモンキーテスト) や 段階リリースの良し悪しについてもお話できたので有り難かった。
FireTV ことはじめ
FireTV全く知らないので新鮮だった。
Google開発者サービス入ってないから Firebase SDK 入れられないとは...おおお...。
Introduce Gradle Kotlin DSL
Gradle Kotlin DSL の紹介。そんなのあったんスね...。
私はRubyistなのでどっちかというとGroovyの方が扱いやすいし好きなんだけど、Kotlinで書きたい気持ちも分かるようなそうでもないような。
実際、Kotlin で書くメリットもさほど無いようなので、これはスルーしてもいいかなぁ...と思った。
余談
お酒強くないくせにハイボール飲んだせいか、翌日から体調崩したので反省。
slackに流す分報にprefixを付けたい
分報とは
日報はその日の作業や悩みをその日の最後に書いて出すことになる。作業中の課題や考えていることが、日単位で共有されるため、他の人が目にする時には、すでにその課題は解決済みな場合がある。情報共有の時間差がどうしても発生してしまう。
そこで、ツイッターのようにその時その時の作業内容や悩みをアウトプットする取り組みとして、分報というものが活用できる。
分報の考え方や進め方は次の記事が詳しい。
私の分報の仕組み
私は Terminal で zsh で vim な開発環境なので、つぶやくなら Terminal 上で行いたい。
自社ではSlackを使っているので、TerminalからSlackに分報を送信したい。
そこで下の記事を参考に、 slackcat を活用することにした。
slackcat の課題
slackcat は Slack App の Token を使うので、私のアカウントで発言したことにはならず、Token を発行した Slack App が発言したことになってしまう。
妥協策
せめて、もう少し自分の発言っぽさを出したいので、カスタム emoji を追加したい。
下のような感じ。
分報を送るためのスクリプト
毎回 emoji を入力するのは面倒くさい。
また、いちいち slackcat
とコマンドを入力するのも面倒くさい。
そこで、一度実行したら常に入力待ちになって、文字列を入力して改行する度に、カスタム emoji を先頭に付与して Slackに送信するスクリプトを作った。
#!/bin/bash set -e which slackcat >/dev/null || { echo "required slackcat"; exit 1; } if [ $# -gt 0 ]; then echo "${*}" | slackcat -c "${MY_SLACK_CHANNEL:-times-yasuhiroki}" -u "${MY_SLACK_USERNAME:-yasuhiroki}" --stream else cat | gstdbuf -oL gsed 's/^/:yasuhiroki: /g' | slackcat -c "${MY_SLACK_CHANNEL:-times-yasuhiroki}" -u "${MY_SLACK_USERNAME:-yasuhiroki}" --stream fi
stdbuf
で入力を行ごとにsedに渡して文頭にカスタムをemojiを追加している。
mac なので gstdbuf
と gsed
となる。 BSD版だと sed -l
としないと slackcat
に文字列を渡してくれない。ただ、私の環境だと日本語を入力するとエラーになるので、GNU版が必須。なんでだろ。
実装当初、BSD sed で実装していてうまくいかず悩んでいたら @eban さんが Ubuntu だとできたと教えてくださり、GNU版じゃないとダメなのだと気付いた。