エンジニアが自分の技術スタックについて書いているのを見ると、いつも新しいツールを学びたくなる。それが独りで運営しているときは特に、他の人の経験から学ぶことに興味がある。
2015 年、現行のパスワードマネージャーに不満を感じていた。特にプライベートサーバーを運営する人々に対して、まともなものがなかった。そこで、Psono、オープンソースのパスワードマネージャーに取り組み始めた。Psono は当初から SaaS として運営するつもりはなく、複数のテナントをサポートする今の形にするのは後になってからのことだ。
Psono の規模感を少し理解してもらうために説明すると、現在 Psono は約 70 カ国でインストールされており、インストール数は 4000 を超えている。Psono SaaS は現在、15,000 人以上のユーザーが利用しており、ほとんどがPsono の無料コミュニティエディションを使っている。これは有料の Enterprise 製品と同じ技術スタックを使っている。
典型的な Psono のインストールには、データベース、サーバー、2 つの Web クライアント(通常のユーザー用と管理者用)、iOS と Android アプリ、Chrome と Firefox 用のブラウザ拡張機能が含まれている。また、顧客は LDAP ゲートウェイやファイルサーバーを追加でインストールすることもできる。
さらに、他にも多くのインフラが整っている。会社のホームページや製品ページを支えるウェブサイトから、エンタープライズ製品のライセンスサーバー、見積もりや請求書を処理する中央 ERP システム、Psono SaaS を購入してインストールを管理するためのショップ、それに OIDC を使用した認証サービスまである。
この記事のコースを通じて、私は古くて退屈な技術を好むことが分かると思う。
言語
- Python: すべてのバックエンドコードは Python で書かれている。Python の最大の利点は、その豊富なエコシステム。型の欠如(多くの人がこれを欠点と見なしている)は、Web サービスの構築を非常に速くする。スタートアップとしては、プログラミング言語において最も重要な要素の一つだ。
- Javascript: おやおや... これは予想通りだ… 2015 年にはすでに、Javascript なしでウェブサイトを作成することは不可能だった。
Python はウェブサービスのための私のお気に入りの言語だ(ここでは Python がなぜ他の言語より良いのかについての考えは省略する。これは別のブログ記事を埋めるだろう)。唯一の欠点は、すべての依存関係を確実に持つコードを出荷する可能性をカバーする必要があることで、特に人々がローカルにインストールして問題が発生した場合にサポートを求められる場合、これは非常に重要だ(速度面では、他の人がここに追加するかもしれないが、Python は十分に速い)。
フレームワーク
- Django: 「ソロ開発者にとってスーパー力のようだ」(ここで Athony N. Simons の引用を使わせてもらう)。エコシステムとともに、あなたが直面するほぼすべての問題を解決する。認証、テンプレート、メール、データベースマイグレーション、totp、など。
- Django Rest Framework: 現在すべての API を駆動しており、素晴らしい仕事をしている。シリアライゼーション、認証、権限、ビューの異なるレイヤーは、コードを非常にきれいに保つ。
- React: 最近、通常の Web クライアントを React に移行した。古い Web クライアント(2015 年に始まったことを覚えておいてください)は AngularJS で書かれており、バックワード互換性を保つためにかなりの努力が必要だった。例えば、ユーザーがドキュメントにシークレットへのリンクをブックマークしていたり、リンクシェアを使用している場合、パスは変更しないようにしなければならなかった。また、独自のロゴでカスタムブランディングを行っている人々もおり、システム上のパスは変更しないようにする必要があった。
- webpack: ここに言及したい。現在、私が不満を感じている唯一の部分だ。遅く、イライラする、学ぶのが難しい… 唯一の利点は、決して行き詰まらないことだ。経験するかもしれない問題はすべて、Stackoverflow で既に質問されていて、解決策が見つかる。
- Gatsby: 会社と製品の静的 Web サイトを駆動する。以前は WordPress を使用していたが、アップデートによる管理オーバーヘッドとウェブサイトが侵害される恐れ(および潜在的な悪評)から、Gatsby に切り替えた。これまでのところ、振り返って後悔したことはない。
- Vuepress: 見つけることができた最もまともなドキュメント管理システム。静的 Web サイトにコンパイルし、現代的なルックスを持っており、現在Psono のドキュメントを駆動している。
- Material UI: フロントエンドを駆動する主なライブラリ。機能が豊富で、React とよく連携し、古い Bootstrap ベースのテーマとは対照的にかなり現代的な見た目を持っている。
ここに言及しなければならないと思うものは他にも無数にあるが、私の意見ではこれらが「最も重要」なものである。
データベース
Django が複数のデータベースをサポートしているにもかかわらず、早い段階で、Django のすべてのデータベースをサポートするか、特定の 1 つだけをサポートするかの質問に直面した。根本的な理由は、データベースにネストされたツリー構造を保存していたからだ。複数のルートと共有ブランチを持つツリー。これを効率的にクエリすることが重要で、すべての利用可能なオプションを検討した結果、Postgre の ltree 拡張機能に決めた。
何かを開発してそれを一人で運営するつもりなら、それはクラウド上で信頼性のあるものでなければならず、クラウドプロバイダーによって管理される必要がある。さらに、ベンダーロックインを避けたいので、クラウド固有のものは何も避けたい。これにより選択肢が非常に限られる。
私の選択:
- Postgres: 選択肢は 2 つのオープンソースデータベース、MariaDB または Postgres。最初は Maria(主に Maria DB の Galera クラスターによるものだが、これも「若い開発者がハイパーグロースを計画する」という誤った考えの一つだ ;D)を選ぶつもりだったが、ltree 拡張機能がないため、手が縛られた。Postgres のシャーディングオプションへのすべての開発が進んでいる現在、その決定を後悔したことはない。
- Redis: 大規模インストール時のキャッシュとして使用する計画がある。Redis または Memcache のどちらかを選ぶことができる。どちらも優れた選択肢だが、Redis プロトコルが現在キャッシングの事実上の標準となっているため、Redis を選んだ。唯一の欠点は、Redis がシングルスレッドであることだ。
インフラ
Psono が依存しているインフラの簡単な概要:
- Gitlab: Gitlab は Psono のすべての自動化を担当している。注目に値するのは、Psono のすべてが自動化されていること。これはリリースを管理し、Psono エコシステム全体を維持するための重要な要素の一つだ。2015 年には、すべてのオープンソースプロジェクトが github で運営されていたが、Gitlab は(そして今も)非常に強力で、機能的には優れている(github の検索機能を除く)。Gitlab は、すべてのソフトウェアのビルド、リリース、脆弱性スキャンを担当している。
- Cloudflare: 過去 10 年間で私に最も影響を与えた最も革新的な会社。現在、Cloudflare がインターネットを動かしていると言っても過言ではない。信頼性の高い名前サーバー、TLS、まともな CDN、エッジワーカーなどの高度な機能を提供している。DDoS 保護と WAF 機能は、パスワードマネージャーとして非常に重要な付加価値だ。SaaS 顧客が自分のドメインを設定できるようにするための SSL as a Service 機能を使用したいが、Cloudflare の Enterprise レベルのペイウォールが厳しすぎる。独立したプラグインとしてリリースされ、購入できることを期待している。
- namecheap: 私のお気に入りのドメインと SSL 証明書のソリューション。
- Google Cloud Run: すべてのバックエンドサーバーは Google Cloud Run で運用されており、サービスのフリートを作成する際に非常にコスト効率が良く、信頼性が高い。スタックが動作し始めると、非常に優れた仕事をしてくれる。トップクラスの API / CLI 統合は大きなプラスだ。いくつかの欠点もある。Google からのサポートが欠けていることや、Google がある時点でクラウドプロバイダーとして 3 位であることは価値がないと判断し、製品をキャンセルする可能性があることなどだ。
- Artifactory: npm のアウトエージやビルドアーティファクトの保存(2015 年には Gitlab にバンドルされていなかった)からビルドパイプラインを保護している。
- Docker Hub: すべての docker コンテナを保存し、追加のセキュリティースキャンとコンテナの配布を行っている。
- Mailgun: すべてのメールを処理する。多くのメールソリューションプロバイダーとは異なり、Mailgun は優れたログおよび分析機能を持っている。サポートは一流だ。唯一の問題は、ときどきスパムフォルダーに送られることだ(SPF や DMARC が設定されていても)が、それ以外は素晴らしい仕事をしている。
- Poeditor: すべての翻訳を処理している。寄稿者はアクセスをリクエストできるので、外部の人がプロジェクト翻訳を助けることが重要だ。サポートは素晴らしく、非常に迅速な返信が得られる。
- Docker: プロジェクト全体のベストな選択の一つ。特に Python を使用しており、すべての Python/OS ライブラリの依存関係を持つ作業用 Python コードを出荷することが難しいためだ。顧客がオンプレミスで実行し、システムの更新および維持が必要な場合に、Docker はすべてを可能にし、インストールされたパッケージを完全に制御できる。これでサポート問題の少なくとも 70%が解決される(ただし、Docker に慣れていない人々が引き起こす新しい問題が 20%追加される)。
監視
時には問題が発生し、その時に何が起こっているのかを知る必要がある。そこで役立つのがこれらのツールだ:
開発インフラ
私のローカル開発スタックの簡単な概要:
- Windows with WSL: 多くの非難を浴びるかもしれないが、私は Windows を使用している。過去数年間、Linux VM をどこかに持っていて開発のために接続していたが、現在は WSL で動作している。両方の世界の最高の部分を享受している。
- Pycharm / Webstorm: Jetbrain の IDE を使用している。リモート開発機能は開発ワークフローに不可欠であり、この「バッテリー込み」哲学は私には合っている。時には約 20 のプロジェクトを開いており、RAM が豊富なデバイスが必要だ。VSCode も現在良い代替品のようだが、過去数年間で Jetbrains に慣れており、別のものを学ぶことは精神的な強さを必要とするため、この投資は現時点ではしたくない。誰もが慣れたものを使うべきだと思う。
サポート
製品を使用している人々のサポートを処理するために必要なツールがある:
- Freshdesk: 典型的なメールチケットソフトウェア。様々な顧客のリクエストを追跡するのに役立つ。初期段階では無料ティアがあり、創業段階には特に重要だ。
- Discord: チャットを好む人や、より直接的な会話/助けが必要な人に役立つ。
その他
他の人に役立つかもしれない特定のツールがある。特にドイツでビジネスを運営する人々にとっての銀行:
- Odoo: 最高の ERP システム。オープンソースエディションは無料で、Python といくつかの XML の知識で簡単に拡張することができる。そのカスタマイズおよびカスタム API との統合オプションは一流だ。
- Holvi: 私たちの主要な銀行口座。ドイツでは、会社がまだ完全に登録されていない場合に設立口座、ドイツ語で「グリュンダーコンター」を設立することを許可する銀行が必要であり、これが会社を登録するために必要な最初の資金を転送できる場所