自主的20%るぅる

各々が自主的に好き勝手書くゆるふわ会社ブログ

SlackのIncoming/OutgoingなWebhookでChatOpsと言い張るなにかを作った話(計画編)

たまにはエンジニアらしい事したい!

みなさんこんにちは。

ここ最近、「君からビールを取ると泡しか残らない」とシャッチョサンから言われたんですけども、これは褒め言葉として受け取っておけばいいんでしょうかね?

(゜Д゜)

まあ、普段ビールばっか飲んでいるところしか見せられていないので、たまにはエンジニアらしいことをアレしておこうかなとか思ったりする今日この頃です。

……誰向けのアピールだよって話ですが。

_ノ乙(、ン、)_

ChatOpsにチャレンジ!

じゃあ……ってことで、いつぞやにどこかで話題になってたような気がしないわけでもないかもしれない「ChatOps」ってやつを自社に導入してみることにしませぅ。

まずは計画を立てよう!

漠然と「ChatOps導入するぞ!」っていっても、誰も使わないか誰かの手間を増やすだけのダメダメシステムが出来上がるのが関の山。

なので、ちょっと何をアレするか考えて見ましょう(´・ω・)(・ω・`)ネー

……と、考えて見たところ、社内WebシステムのデプロイをChatOpsで自動化したりしたらいいんじゃね?……って天の声が聞こえてきましたよ。

今までどうだったっけ?

っていうのもですね、今までのデプロイってこんな感じのフローだったんですよね。

  1. Featureブランチを作る
  2. 手元のPCでゴリゴリ開発
  3. テストサーバにPhpStormから転送(ここは自動)
  4. よさげならGitHubにCommit&Push
  5. PR作る
  6. masterブランチにマージする
  7. リリース資材をまとめる
  8. SFTPあたりで本番サーバに転送
  9. SSHでログイン
  10. 転送した資材を展開
  11. 展開した資材を適切な場所に配置
  12. 必要に応じてパーミッションとか調整
  13. ゴミを削除

……うん。文章にするとすげぇ手間(;´Д`)

何が問題なんだっけ?

このフローの何が問題なのか……ってのも考えてみましょうか。

ざっと思いつく範囲だと

  • 手順が複雑
  • サーバへのアクセス権が必要
  • 「リリース資材を作る」という苦行が必要
  • 「分かってる」人しかできない/やりにくい

って感じでしょうかね。

なんていうか、1〜6までは結構スマートなのに、それ以降がものすごくイケてないって感じがします。

どうするか?

要はイケてないところをスマートにすればOKって話なので、「こんな感じにしたいなー」ってのを整理しておきましょう。

イケてないのはリリース周り。ナウい言い方をすれば、デプロイ周りですね。ここをいい感じにしてみましょう。

  1. Featureブランチを作る
  2. 手元のPCでゴリゴリ開発
  3. テストサーバにPhpStormから転送(ここは自動)
  4. よさげならGitHubにCommit&Push
  5. PR作る
  6. masterブランチにマージする
  7. 未知なる力に目覚め、紋章が刻まれし左手に封印された漆黒の龍(ドラゴン)が放つ紅の裁きが大地を焦がす(デプロイ完了)

なんということでしょう……。あれだけ煩雑なデプロイ作業が、こんなにもシンプルに……。

いいですねいいですね。これでいきましょう( ̄ー ̄)

まずは下ごしらえから

とりあえず、自動化するためにはやることをシンプルにしておかないといけません。

もちろん複雑なプロセスを自動化するのも悪くはないですが、それがちゃんと動いているかをテストしたりとかメンドイですしね。KISSの原則ですよ。ええ。

コマンド一発で手動デプローィ

まず、コマンド一発で手動デプロイできるようにしましょう。これは結構簡単な話。

私たちはソースコードをGitHub.comのプライベートリポジトリにホスティングしているので……。

masterブランチ1)じゃなくてもいいんだけど、今回はそういう取り決めを常にリリース可能な状態にしておいて、git pullで最新ソースゲットできるようにしておけばよさげ。

ってことで、まずはリポジトリからgit cloneしてまいりませぅ……って流れになるわけですが、プライベートリポジトリなので、匿名で取ってくることができません!

そんなときは慌てず騒がず、「Deploy keys」を使いましょう。

細かい手順は上記サイトを参照されたし。

簡単に流れを書いておくと……

  1. デプロイの時に使う予定のユーザでSSHなキーペアを作成2)パスワードなしで
  2. GitHubの管理画面から公開鍵を登録
  3. そのキーを使ってgit clone

って感じですね。

ここまでやったら、完成したも同然。ここを自動化すれば終わりですから( ̄ー ̄)

どのタイミングでデプロイする?

よくある構成だと、GitHubにPushしたらCI走ってOKならデプロイ……って感じにするんでしょうけども……。

当社はCIなんて使ってない3)主としてボクのやる気の問題によりし、Pushしたタイミングとデプロイしたいタイミングが違うケースも多々ある……と。

ので、別なきっかけでデプロイプロセスをキックしたいというニーズが。

じゃあってことで、会社で使ってるSlackを使いましょう。適当なチャンネルを作って、そこで魔法の言葉を唱えるとデプロイが始まる……的な。

長くなったので今回はここまで!

ってことで、後はこれを実際に作るだけなわけですが……。

余談が多すぎたせいか、長くなりすぎてしまったのでここまでにしておきましょう!

注訳はこちら

1 じゃなくてもいいんだけど、今回はそういう取り決め
2 パスワードなしで
3 主としてボクのやる気の問題により
Let’s share this article!

{ 関連記事 }

{ この記事を書いた人 }

Yuta Hayakawa

2016年6月入社。2020年12月より取締役に就任しました。

普段は東京本社で管理職のお仕事したり、広報的役割としてテキスト書いたり動画作ったりするのが最近のお仕事。

自称「社内システムチーム統括」として、社内システムチームの面々を見守りつつ毎日を過ごしています。

プライベート面では、音楽やコンピュータ関連、ゴルハム&ジャンハム関係、ゲーム関係が興味あるポイント。

あと、我が子可愛い。

記事一覧