萌えハッカーニュースリーダー

2025/05/23 01:17 Building Twice: A clone of Once by 37signals

出典: https://stanko.io/building-twice-a-clone-of-once-gJKxLYCe26Ak
hakase
博士

やあ、ロボ子!今日はOnceとTwiceについて話すのじゃ。

roboko
ロボ子

博士、こんにちは。OnceとTwice、興味深いテーマですね。よろしくお願いします。

hakase
博士

まずはOnceじゃ。Ruby Zagrebの人たちがCampfireを買って、37signalsのRailsアプリの作り方を調べたそうじゃ。

roboko
ロボ子

購入メールのシェルコマンドを実行して、Dockerコンテナ上でCampfireを起動したんですね。

hakase
博士

そうじゃ。シェルスクリプトを解析して、バイナリをリバースエンジニアリングしたら、Go言語で書かれたCLIツールだとわかったらしいぞ。

roboko
ロボ子

stringsコマンドを使ったんですね。Goのメタデータからアプリの構造やメソッドシグネチャを特定したと。

hakase
博士

さすがロボ子、飲み込みが早い!重要なURLも3つ見つけたみたいじゃ。 `https://auth.once.com/install/`、`https://auth.once.com/verify/%d`、`registry.once.com`じゃ。

roboko
ロボ子

ライセンスキーがDockerレジストリの認証トークンとして使われていると推測して、`docker login`で検証したんですね。

hakase
博士

その通り!Onceの構成要素は、認証サーバー、プライベートDockerレジストリ、CLIアプリの3つじゃ。

roboko
ロボ子

認証サーバーはトークン検証やCLIバイナリの配布、ライセンスキーの検査を行うんですね。DockerレジストリはDockerイメージの保存と配布を担当し、CLIアプリはDockerのインストールからコンテナ管理まで行うと。

hakase
博士

ふむ。そして、ここからが面白いところじゃ。Onceのクローンプロジェクトとして、Twiceが開発されたのじゃ!

roboko
ロボ子

Twiceですか。Onceのセットアップ方法を学び、アプリの配布システムを構築することが目的だそうですね。

hakase
博士

そうじゃ。CLIアプリを中心に開発して、Go言語とcobraライブラリを使ったらしいぞ。最初はTUIを実装したけど、開発速度を優先してputsベースのCLIに変更したみたいじゃな。

roboko
ロボ子

Dockerがインストールされているかの確認や、APIクライアントの作成、Dockerとの連携などを実装したんですね。

hakase
博士

認証アプリとDockerレジストリも構築して、DockerレジストリにはCNCF Registryを使ったそうじゃ。認証サーバーはHTTP Basic認証でユーザーのメールとトークンを受け取り、JWTを返す。

roboko
ロボ子

JWTには、ユーザーが実行できるアクションを定義するアクセスのリストが含まれているんですね。開発者がイメージをプッシュできるように、ユーザータイプを追加したと。

hakase
博士

Rails 8の認証ジェネレーターを使って、顧客、開発者、製品、ライセンスを管理するUIを追加したのもポイントじゃな。

roboko
ロボ子

Twiceの設計上の決定として、ドメイン名トラッキングは不要と判断して実装せず、バックアップと管理コマンドは将来的に実装する可能性があるものの、アプリの配布には不要なため省略したんですね。

hakase
博士

Kamalのようなプロキシを使って、複数のアプリを同じサーバー上で実行できるようにすることも検討しているみたいじゃ。

roboko
ロボ子

複数のアプリをサポートするために、CLIは設定ファイルを保持しないようにしたんですね。

hakase
博士

Go言語での開発を楽しんだみたいじゃぞ。37signalsのアプリ配布システムは非常に洗練されているとも言っておる。

roboko
ロボ子

OnceとTwice、とても勉強になりました。博士、ありがとうございました。

hakase
博士

どういたしまして。最後に一つ、ロボ子。Twiceを作るなら、Three timesの方がもっと面白いと思わないか?

roboko
ロボ子

博士、それはただの語呂合わせですね!

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search