Upgrade to Pro — share decks privately, control downloads, hide ads and more …

UNIX哲学とアジャイルとAWSと

 UNIX哲学とアジャイルとAWSと

yoshitaka KOITABASHI

February 12, 2023
Tweet

More Decks by yoshitaka KOITABASHI

Other Decks in Technology

Transcript

  1. UNIX 哲学の歴史 • 1978年 マキルロイの UNIX 哲学 AT&T ベル研究所プログラマー パイプの発明者

    • 1994年 ガンカーズの UNIX 哲学 DEC のプログラマー x window system 開発チームメンバー • 2003年 レイモンドの UNIX 哲学 オープンソース推進団体 OSI の共同創設者 「伽藍とバザール」の著者 2023/2/13 yoshii0110 5
  2. 余談: UNIX ってなぜ UNIX というのか • ケントンプソンが PDP-7 で作っていた当時のUnixが同時に ひとりのユーザしか処理できなかった

    • 同僚がジョーク混じりにこのシステムのあだ名を UNIplexed Information and Computing Service (UNICS) にしたのが語源 2023/2/13 yoshii0110 6
  3. 余談: パイプの起源 パイプとは、あるプログラムの出力を、他のプログラムの入力に接続するための、 統一されたメカニズム 例: > cat /etc/group | fgrep

    appserver _appserverusr:*:79: _appserveradm:*:81: • このパイプは、ケン・トンプソンが考案した訳ではなく、マキルロイがトンプソンに強く何度も提案 • 根負けしたトンプソンがある夜、たった一晩で僕がやるといい実装してしまった • ちなみに、マキルロイが提案していたパイプは > で、トンプソンは | を提案し実装 2023/2/13 yoshii0110 7
  4. それぞれの UNIX 哲学 2023/2/13 yoshii0110 9 マキルロイの UNIX 哲学 (Perter

    H.Salusがまとめたもの) 一つのことをうまくやるプログラムを書け 連携するプログラムを書け 標準入出力(テキスト・ストリーム)を 扱うプログラムを書け。 標準入出力は普遍的なインターフェース なのだ ガンカーズの UNIX 哲学 スモール・イズ・ビューティフル 各プログラムが一つのことをうまくやるようにせよ できる限り早く試作せよ 効率よりも移植しやすさを優先せよ 単純なテキストファイルにデータを格納せよ ソフトウェアを梃子(てこ)として利用せよ 梃子の効果と移植性を高めるために シェルスクリプトを利用せよ 過度の対話的インターフェースを避けよ すべてのプログラムをフィルタとして設計せよ レイモンドの UNIX 哲学 モジュール化の原則 驚き最小の原則 明確性の原則 沈黙の原則 組み立て部品の原則 修復の原則 分離の原則 経済性の原則 単純性の原則 生成の原則 倹約の原則 最適化の原則 透明性の原則 多様性の原則 安定性の原則 拡張性の原則 表現性の原則
  5. 余談: DEC という会社と移植性 ガンカーズのUNIX哲学: 効率よりも移植性 DEC という会社: さまざまなアーキテクチャのコンピュータを開発 • さまざまなコンピュータに

    Unix を移植していた • 当時、ベル社で生まれた Unix からいろんな派生の Unix が 生まれ、各社自社の Unix マシンを売るため、 独自の機能をつけていく • なので、Unix 上で書いたプログラムを移植する時は、 シェルスクリプトを使うべきと書籍では書いてあった 2023/2/13 yoshii0110 10
  6. アンドリュー・タネンバウムと MINIX アンドリュー・タネンバウム: MINIXの父、 大学教授 ワーナーは、タネンバウムの教え子 自分の一番重要な仕事は、コンピュータ科学を修めた優秀な学生を 多く育てること MINIX: 教育目的の

    Unix 系 OS 初期バージョンは、フロッピーディスク単体で運用ができた MINIX 3は、ハードウェアを要するもののマイクロカーネル本体のコードは 4000行弱 2023/2/13 yoshii0110 15
  7. アンドリュー・タネンバウムの教訓 • ソフトウェアはガスのようなもので、 入れ物がいっぱいになるまで膨らんでいく • サイズは重要 • 将来現れるかもしれないハードウェアにも適応できるような設計を 心がけよ •

    ハードウェア特有の特殊な機能に頼らなければ、 新しいプラットフォームへの移植がより簡単になる 2023/2/13 yoshii0110 16 引用: https://dl.acm.org/doi/10.1145/2795228 引用: http://member.wide.ad.jp/~shima/publications/Lessons_learned_from_30_years_of_Minix-JP.html
  8. Unix Philosophy and Node.js npm を作ったアイザック・シュルーターが TXJS2013 で こんなことを言ってます 「Unix

    Philosophy is an outlook for software development, not any specific technical development in software. 」 UNIX 哲学は、ソフトウェア開発の展望であって、 ソフトウェアにおける特定の技術的開発ではない 2023/2/13 yoshii0110 18 引用: https://blog.izs.me/2013/04/unix-philosophy-and-nodejs/
  9. ロブ・パイクのプログラミング5ヶ条と Go言語 • プログラミング5ヶ条 • ルール4:派手なアルゴリズムは単純なアルゴリズムに比べてバグが多く、 実装も大変なので、シンプルなアルゴリズムとシンプルなデータ構造を 使うようにすること • Go言語の設計思想

    • Go Conference 2014 Autumn での基調講演「Simplicity is Complicated」 • ロブパイクは、Go言語が成功した要因は「 Simplicity(単純さ) 」にあると語る • 可読性が最重要項目 • 可読性のあるコードは、信頼できる • 信頼できるコードは、理解しやすく、取り組みやすく、壊れてしまっても 簡単に修正できる 2023/2/13 yoshii0110 19 引用: http://users.ece.utexas.edu/~adnan/pike.html 引用: https://go.dev/talks/2015/simplicity-is-complicated.slide#1
  10. マイクロサービスアーキテクチャ • UNIX 哲学 • 1つのことをうまくやる • 連携するプログラムを書け • マイクロサービス

    • ビジネスドメインに基づいて分割され独立して デプロイ可能なサービス • 疎結合で独立性が高い • つまり、単一の大きなソフトウェアを作るのではなく、 複数のプログラムの集まりとして作ることでメンテナンス性、 アジリティ、開発チームの自立性、サービスの堅牢性が向上 2023/2/13 yoshii0110 20
  11. UNIX 哲学と AWS 2023/2/13 yoshii0110 22 • AWS の各サービスはそれぞれ役割が違う •

    Amazon の内部は、Two Pizza ルールにて、1つのチームが 1つのコンポーネントに集中し、全体像を意識する必要がないよう 組織も考えられている => 1つのことをうまくやらせる
  12. Amazon EventBridge Pipes 2023/2/13 yoshii0110 23 • 昨年の re:Invent にて

    Amazon EventBridge Pipes が登場 • ソースとターゲットの間で「イベント」を受け渡す • その際に他のサービスをかませて加工できる 個々のプログラムを適切な仕組みを使って、組み合わせると、 全体 が部分の総和以上になること => 1つのことをうまくやらせる
  13. UNIX 哲学とアジャイル 2023/2/13 yoshii0110 24 引用: https://agilemanifesto.org/iso/ja/manifesto.html 引用: https://www.ipa.go.jp/files/000065601.pdf UNIX

    哲学: できる限り早く試作せよ アジャイル: 早くお客さんに価値を届けることが重要
  14. UNIX 哲学とアジャイルと AWS と • AWS のサービスは、UNIX 哲学を体現している • だが、

    AWS のサービスをただ使うだけでは、できる限り早く試作したり、 お客様にサービスをすぐに提供できない。 • AWSのサービスを使い俊敏にお客様にサービスを提供するには、 クラウドサービスを使うための組織、開発手法が必要 そう、それがアジャイル 2023/2/13 yoshii0110 25