UNIXとAkerunの浅くて深い関係

この記事は Akerun Advent Calendar 2019 - Qiita の15日目の記事です。

どうも、RoRエンジニアのdaikw - Qiita です。

今日は、考え方次第でなんにでも通じるものってあるよね、という話をします。ポエムです。

UNIX哲学

エンジニアリングに関する思想の一つに、UNIX哲学というのがあります。

UNIX哲学とは、ソフトウェア開発に関する文化的な規範と哲学的アプローチのまとまりであり、UNIX OSの開発者たちの経験に基づくものとされている。

UNIX哲学は、それを策定する協会がある訳でもなく、UNIXを生み出した人(ケン・トンプソンら)が言い出したものでもありません。 色々な人が適当なことを語っている感じがあります。 それでも今だに引用されたりするのは、Mike Gancarzというエンジニアが書いたこちらの書籍のおかげかもしれません。

UNIXという考え方―その設計思想と哲学

UNIXという考え方―その設計思想と哲学

GancarzによるUNIX哲学は、特に重要な9のhard tenetと、比較的重要でない10のsoft tenetからなります。

抜粋して紹介すると、

hard tenets:

  • 小さいものは美しい 小さいものは、大きい物にない利点がいくつもある。小さいもの同士なら、簡単に独特の便利な方法で組み合わせることができる
  • 一つのプログラムにはーつのことをうまくやらせる 一つのことに集中することで、プログラムに不要な部分をなくせる。不要な部分があると、実行速度が遅くなり、不必要に複雑になり、融通が効かなくなる。

soft tenets:

  • 同時に考える たいていの仕事は、いくつかの小さい部分に分けられる。これらの小さい部分を同時に実行すると、大きな一つの仕事にかかるのと同じ時間でより多くの仕事ができる。
  • 部分の総和は全体よりも大きい 小さい部品を集めて大きなApplicationを作る方が、大規模プログラムを単体で構成するよりも柔軟性に富む。

僕が特に重要だなと感じるのは、二つめの「一つのプログラムには一つのことをうまくやらせる」というtenetです。

一つのことをうまくやる

一つのことをうまくやる、というのは本当に重要です。

UNIXコマンドはどれも小さく、それ自体の機能はシンプルに作られています。

ソフトウェアの文脈では、「高凝集疎結合」と呼ばれたり、スケールが大きくなると「マイクロサービス」と呼ばれたりもします。要は取り回しやすく、影響範囲が限定されわかりやすい、ということです。

Google Searchは良い例で、「検索」という機能に特化することで他の追随を許さぬ結果を産みました。

これは実はソフトウェアに限ったことではありません。機械設計の分野には「一部品一機能」という言葉があります。

ついてきなぁ! 悪い「設計変更」と良い「設計変更」

ついてきなぁ! 悪い「設計変更」と良い「設計変更」

3-3 工数に関する設変事例:一部品一機能と一部品多機能
 3-3-1 事例:一部品多機能でダブルトラブル発生
 3-3-2 事例:従来の失敗事例集で技術力は向上しない
 3-3-3 事例:一部品二機能で低コスト化設計
 3-3-4 事例:共締めに一部品二機能を駆使する
 3-3-5 一部品一機能、二機能、多機能と共締めのまとめ

解決したい問題に対して、過度な複雑さを受け入れると、そこには地獄が広がっています。機械設計でも同じなんですね。

AkerunとUNIX哲学

わざわざUNIX哲学の話をしたのは、Akerun(に限らずIoT全般)のアーキテクチャも、そういう側面があるなと感じたからです。

一つの商品は、ある一つの問題解決に特化して作られています。

それらが組み合わさって、より高次の問題解決(入退室管理・勤怠連携など)が可能になります。部分の総和は全体よりも大きいわけですね。

Akerun本体

とにかくサムターンを回すことに特化しています。一つのことをうまくやっています。

硬いサムターンでもしっかり回すことができるように、たくさんの電池とトルクの強いモータを積んでいますし、 ある程度の設置ずれなども吸収できるように機構が工夫されています。

一方で外部とのやりとりはBLE通信しかサポートしておらず、外部ネットワークに繋がる能力は持ちません。 本体からするとドアの開閉も知ったことではないし、カードをかざされても「…?」という感じです。

Remote (ゲートウェイ)

Akerunをインターネット経由で操作するには、このRemoteが必要になります。

ゲートウェイとしての機能に特化しており、サーバと本体の間をつなぐためのあらゆる機能をサポートしています。

Akerun本体の設定変更や開閉リクエストは、サーバで一旦受け取ってjobqueとして処理しますが、このjobを取りに行くのもRemoteの仕事の一つです。

ドアセンサ・カードリーダ

ドアセンサはドアの開閉を検知する機能に特化していて、それ以上でもそれ以下でもありません。 それゆえに、開閉検知を確実に行えるようになっています。一つのことをうまくやっています。

本体内蔵だと、キャリブレーションやら何やらで大変みたいですが、、()

カードリーダーも同じですね。一つのことをうまくやっているわけです。

最後に

ポエミーな内容になったので、少しwebっぽいコンテンツを、と思い、UNIX的かどうかのチェッカーをサクッと(個人的に)作ってみました。 github.com

create-react-appでTypescript版をscaffoldして、ant-dをUIフレームワークに使用し、firebaseでホスティングしてあります。 unix-phl-checker.web.app

あなたの考え方はUNIX的ですか?(スマホだと表示が崩れるので注意


株式会社フォトシンスでは、一緒にプロダクトを成長させる様々なレイヤのエンジニアを募集しています。 recruit.jobcan.jp

Akerun Proの購入はこちらから akerun.com