アルパカログ

プログラミングとエンジニアリングマネジメントがメインです。時々エモいのも書きます。

【Rails5】link_toにdataとclassを同時に指定する

link_to ヘルパーはRuby on Railsの数ある便利なヘルパーのうちのひとつです。

link_to ヘルパーを使うとリンク先の指定がシンプルになるだけではありません。

POSTやDELETEなどのHTTPメソッドが指定でき、さらに data オプションを指定するだけで confirm を簡単に出せるのがとても便利なところです。

confirm を出したいケースとしてよくあるのが削除ボタンでしょう。そして削除は得てして危険な操作なので、目立つようボタンを赤くしたいというニーズがあると思います。

confirm を出しつつボタンのスタイルを変えるという、一見するとなんでもないところでハマったので、メモしておきます。

続きを読む

【初心者向け】図解でわかるGitのブランチとコミット

最近エンジニアでない人にGitを教える機会がありました。

意欲のある人に教えるのは楽しいもので、とりあえず動かせた方が学ぶのも楽しいだろうと必要最低限のコマンドだけ教えたんですね。

けれどもどうやら、全体像を把握しないままGitを使うのは難しそうです。

思えば私も、初めてGitを触ったとき何が何やらでわからなかったのを思い出しました。

そういうわけで、自戒を込めて、図を使ってできるだけわかりやすくGitのブランチとコミットについて説明したいと思います。

続きを読む

クラロワで学ぶ 新人エンジニアが手戻りのないPRを作る方法

学生の頃から開発経験はあるし、配属されて現場での開発も経験した。

なのに、PRがなかなかレビューしてもらえないしマージされない、なんなら設計に対する指摘が入って作り直し...なんてことありませんか?

4月に入社した新人エンジニアたちが、そろそろそんな悩みを抱えている頃かなぁと思います。

なぜPRが見てもらえなかったり、設計からやり直しになってしまうのでしょうか?

こういうところに気を付けると良いんじゃないでしょうか?というのを、クラロワのクエスト機能を題材に書いてみようと思います。

続きを読む

話せば伝わるという誤解 ミスの指摘と生存本能

黙っていても自分の仕事がすべて評価されるわけではない(中略)「話せば伝わる」のであれば十分良いと思うべきだ

自分が上司との1on1でよく話している内容」というエントリで感銘を受けた一文だ。

note.mu

この一文は、話しても伝わらないケースがあることを示唆している。ここで挙げられているのは、エンジニアとPMといったように職能が異なることから仕事の細部まで理解できないケースだが、話しても伝わらないケースは他にもある。筆者の書きぶりから、筆者はそれを理解していると想像できる。同じチーム、同じエンジニア(職能)のようなもっと近い関係でも伝わらないケースがあることを。

少し私の自己紹介をしておく。私はCREというエンジニアのグループをマネジメントしているEM(エンジニアリングマネージャー)…と言えば聞こえはいいが、本当のところはただのしがない中間管理職だ。自身もエンジニアとしてコードを書くが、コードを書くのと同じくらい、人と組織の振る舞いに関心がある。組織のアウトプットは人数の増加に比例しないというのは身をもって知ってきたし、それでもどうすれば今より良くできるかということを日々考えている。

今日はその中でも、私たちが頭ではわかっているのについ陥ってしまう「話せば伝わるという誤解」について書いてみたい。

続きを読む

EC2へのSSHをIAMユーザーに限定する

小規模開発において、EC2にSSHできるユーザーをIAMユーザーに限定したい(≒IAMで擬似的に管理したい)というニーズはよくあると思います。

開発者やサーバー台数が少ないケースでLDAPは管理コストがかかるし、LDAPの導入に時間を使うなら開発に使いたいというのがあるでしょう。

そこで、できるだけシンプルに実現するために次のような仕組みを構築します。

f:id:otoyo0122:20190615112501p:plain:w480

  1. 公開鍵をIAMに登録する
  2. 公開鍵の取得をEC2に許可するポリシーを作成する
  3. 公開鍵を取得するシェルスクリプトを作成する
  4. sshd configのAuthorizedKeysCommandにスクリプトを指定する

以下、それぞれの項目を説明します。セキュリティの考慮漏れがあるかもしれないので、使用は自己責任でお願いします。

続きを読む

Gunicornで先に重い読み込みを済ませておくpreload_appオプション

PythonのWebサーバーGunicornにはワーカーのためにプロセスをフォークする前に、重いファイルをプリロードしておけるオプションがあります。

例えば機械学習のモデルや辞書といったような重いファイルをロードして使うようなアプリケーションでは、ワーカープロセスが作られてからロードすると毎回ロードのための時間がかかってしまうため、preload_app オプションを使うと大幅な時間短縮に繋がります。

$ gunicorn --preload app.wsgi

preload_appオプション

Load application code before the worker processes are forked.

By preloading an application you can save some RAM resources as well as speed up server boot times. Although, if you defer application loading to each worker process, you can reload your application code easily by restarting workers.

もちろん、アプリケーションのロード時に重いファイルを読み込むようにコードを書き換えてあげる必要がある点には注意です。ルーティングによるdispatch後に呼び出される関数内でロードしてもプリロードの恩恵は受けられません。

参考情報