アプリをレゴ(LEGO)のように使おう

2023年05月25日 木曜日


【この記事を書いた人】
ふぇにっくちゅん(守田 瞬)

2021年11月にセキュリティ情報統括室に所属。頑固なので、ニックネームだけでもやわらかくひらがなにしてみました。普段はハニーポットで収集したDDoSの発生源であるマルウェアを対象に分析しています。

「アプリをレゴ(LEGO)のように使おう」のイメージ

おはようございます。こんにちは。こんばんは。ふぇにっくちゅん です。

現時点で、みなさんは cats_dogs にどのようなイメージを持っているでしょうか?
cats_dogs は、単体のアプリではありません。
複数のモジュールを組み合わせて、自分たちのドキュメント管理システムを実現します。

どのぐらいのモジュールが用意されているかは、こちらを御覧ください。
実は、以前公開した nginx の LDAP 認証モジュールも cats_dogs の仲間です。

では、以下に cats_dogs の仲間を紹介します。

  • ngx_auth_mod
    • 認証・認可の機能を有するモジュール
  • cat_mdview
    • Markdown ファイルをコンテンツとして表示するためのモジュール
  • cat_tmplview
    • Markdown ファイルをコンテンツとして表示するためのモジュール
    • ファイルを部分的に、表示・非表示の切り替えができる
    • 簡易なUIを表示できる
  • cat_multi_getexec
    • 簡易なUIから実行される処理を実現するモジュール
  • cat_getexec
    • APIが提供できるモジュール

それぞれのモジュールはシンプルになっています。
つまり、うまく組み合わせて、自分なりのドキュメント管理システムが構築できるようになっています。

皆さんは、レゴブロックで遊んだことはあるでしょうか?
レゴブロックは、必要なブロックを選んで、組み合わせて城を作ります。
cats_dogs は、必要なモジュールを選んで、組み合わせてシステムを実現します。
感覚として似ています。

つまり、cats_dogs はカスタム性が高いということです。
本記事では、cats_dogs のカスタム性について紹介します。

cats_dogs のカスタム性

cats_dogs をカスタマイズするには、大きく2つの観点で行なえます。

  1. モジュール単位
  2. サーバ単位

一つ目のモジュール単位は、主にブラウザで閲覧する際の見栄えをカスタマイズできます。
二つ目のサーバ単位は、サーバ上で提供する機能をカスタマイズできます。

モジュール単位のカスタマイズでは、主に見栄えをカスタマイズできます。
この見栄えの部分を担当するのが、cats_mdview と cats_tmplview のモジュールです。
たとえば、ドキュメントの上部に、ディレクトリの情報を表示させるか否かを選択できます。
また、HTML のテンプレートや CSS からブラウザの表示を決めているため、それらのファイルを自分なりに変更することができます。
フォントの変更もできるようになっており、cats_dogs のフォントデータを作成するツールも用意しています。

サーバ単位のカスタマイズでは、モジュール同士を組み合わせて、サーバで提供する機能をカスタマイズできます。
たとえば、cats_tmplview には、簡単な UI を表示できます。
しかし、これだけでは見栄えだけであるため、単なるハリボテになっています。
UI から実行する処理は、cats_multi_getexec と組み合わせることで、実現します。

他にも、最も単純な Markdown ビューアとして利用したい場合には、cats_mdview だけを稼働させれば良いことになります。
認証・認可の機能が欲しければ、ngx_auth_mod を組み合わせます。
このように、必要な機能があれば、組み合わせて使い、不要な機能は使わない、という選択ができます。
この作業が、レゴブロックと似ています。

モジュールの選択

cats_dogs を利用していく中で、後に利用しなくなるモジュールもあると思います。
その場合にも、簡単に切り離せるようになっています。
各モジュールは、独立して稼働させるようになっているため、切り離しが容易です。
また、設定ファイルや HTML テンプレートの異なる、同じモジュールを複数起動することも可能です。

みなさんも色々カスタムを楽しんでみてください。
では、最後に cats_dogs の在り方を紹介します。

お前の物はお前の物、俺の物は俺の物

cats_dogs はレゴブロックのように組み立てられることを紹介しました。
では、自分がレゴで作ったお城に、知らない人が勝手にカスタマイズを行ったらどう思うでしょうか?
嬉しいときもあれば、嫌なときもあります。

この違いは、主に同じ目的を持ったものであれば、嬉しく感じます。
逆に、違う目的を持ったものであれば、嫌に感じます。
実は cats_dogs のカスタマイズは、この状況を考えておくと、うまく活用できます。

cats_dogs はカスタマイズ性が高いあまり、柔軟にドキュメント管理の機能を実現できます。
そのせいで、一つの cats_dogs サーバ上で、どんな要望にも対応しようとする思考が生まれやすくなっています。
どんな要望にも対応するということは、それなりに一つのサーバに利用者が集まっている状態と想定できます。
つまり、目的の違う利用者が一つのサーバ上に共存するわけです。
これでは、先程のレゴの話と同じで、嫌に感じる場面が多くなります。

cats_dogs の在り方

cats_dogs は、ある程度のまとまりでサーバを構築するようにすることをおすすめします。
たとえば、同じ組織、同じプロジェクト、同期メンバーだけ、このような単位です。
ドキュメント管理という意味で、同じ目的が合わせられる利用者だけが、サーバ上にいることが好ましいです。

一つのサーバで、上手くやろうと思うと、提供する機能が複雑になります。
そうすると、システムのメンテナンス、維持が難しくなっていきます。
たとえば、同じ目的を持つ人達が利用するサーバのように分けておけば、メンテナンスも都合の良い時を選びやすくなります。

他にも利点があります。
社内で作成するドキュメントは、価値が高いものが多いはずです。
たとえば、システムマニュアル、議事録、業務フローなどです。
身近な利用者だけであれば、アクセス数も限定的なので、サーバの負荷も少なく、長期的な障害なども発生しにくくなるはずです。
つまり、大事なときにドキュメントが閲覧できない、という状況を減らすことができます。

ここで、似たようなシステムを社内で複数運用するのは難しいのではないか?という疑問が浮かびます。
たとえば、WordPress を社内で複数運用するということを想像してください。
ドキュメントを公開したいだけなのに、データベースやプラグインの管理、いらないものがついてきます。
これでは、疑問が浮かぶのも無理はありません。

cats_dogs は、不要なモジュールを選ばないことができます。
また、データベースも必要ありません。
つまり、WordPress などと比較すると、構築や運用に負荷が低い上に、管理・運用範囲をコントロールできるわけです。
複数の重いシステムを構築・運用するのは誰も嫌がります。
しかし、個人でも構築・運用できるシステムなら、先程の疑問は消え去ります。

他にも、複数のサーバで運用し始めると、組織の合併なども考慮しておく必要があります。
cats_dogs はモジュールの切り離しが容易と説明しましたが、実はドキュメントの切り離しも容易です。
アプリが利用するのは、テキストファイルと画像、動画などのファイルです。
そのため、組織の合併などでサーバを一つにまとめないといけないときに、ドキュメントだけを引っ越せば終わります。
使わなくなったサーバは、落とせばいいのです。

この柔軟性が、cats_dogs の良さでもあるため、是非参考にしてみてください。

さいごに

cats_dogs は様々なカスタムができることを紹介しました。
その柔軟性の高さから、システムが肥大化しないように、目的を持って複数のサーバを社内で運用することをおすすめしました。
cats_dogs に足りない機能があるかもしれませんが、同じ思想でシンプルなモジュールを皆さんも作ってみてください。

ふぇにっくちゅん(守田 瞬)

2023年05月25日 木曜日

2021年11月にセキュリティ情報統括室に所属。頑固なので、ニックネームだけでもやわらかくひらがなにしてみました。普段はハニーポットで収集したDDoSの発生源であるマルウェアを対象に分析しています。

Related
関連記事