対象読者
- PCスペックが貧弱で困っている方 e.g. メモリ8GB
- PCを新規購入せずに安く開発環境を強化したい方
- 様々なLinuxディストリビューションをサブPCなしで試したい方
- Python3.10以上が使える方
- ターミナルでのコマンド操作が可能な方
結論
はじめて個人開発したツールを公開した。「ConoHa VPS」のVM(=Virtual Machine=サーバー)をCLIから操作するためのツールである。
自分だけが使うのでも十分だけど、他の人にも利用してもらえたらもっと嬉しいので「conoha-client」を布教するためにこの記事を書く。
他の既存類似ツールより完成度が高いと自負している自信作だ。根拠は以下の2点。
- 他ツールはConoHa APIの単純なクライアントに過ぎず、VMの作成・削除・保存、ssh接続設定を頻繁に行うには不便なものしかなかった。そんな不満を解消するために自作したツールだから
- 高品質なソースコード:すなわち、テスト駆動開発や自動テスト、型ヒントやlintingツール、ドメイン駆動設計インスパイヤなpydanticによるドメインモデルとレイヤードアーキテクチャ、Reactのフロントエンドアーキテクチャにインスパイヤされたフィーチャーパッケージによって高品質でモダンなpythonプロジェクトに仕上がったため(自画自賛)
開発した動機「買い替えずに低スペックPCを使い続けたい」
私の貧弱なPCは開発環境として厳しかった。WSL2でDBを立てつつ、LSPを使ってコード書きつつ、ブラウジングすると画面がカクつく。でもPCを買って解決するのはちょっと芸がない気がした。WSL2の負荷の部分を外部化できれば、…まだ戦えるんだ!
そこでVPSを利用することを考えた。VPS(=Virtual Private Server, 仮想専用サーバー)とはコンテナ化された自分専用レンタルサーバーだ。普通のレンタルサーバーと違ってroot権限が使えるので開発環境としてバッチコイ。
私のWSL2の開発負荷は2GBメモリのVMで事足りそうだった。2GBなら1時間4円で使えるみたいだ。
- 月160hのフルタイム労働?なら640円/月
- 週10hの趣味開発程度なら160円/月
これは安い!
この時間課金制を有効利用するためには、使いたいときにその都度必要な時間だけVMを生存させるジャストインタイムな運用が必要だ。そのためには頻繁にVMを起動・破棄・再構築・ssh設定[※1]しなければならない。所与の画面操作でこれらをやるのはツラ谷園。そのための便利機能の1つが前述の「graceful remove」であった。
数多あるVPS。選んだのはConoHaでした
VPSサービスを提供している会社はいろいろある。なぜConoHaなのか。理由は3点。
- 1時間毎の時間課金制がある
サーバーなど以外で1日24時間・1ヶ月をぶっ通しで使うことはできないので、時間課金制以外は開発環境として使うにはかなり無駄が多い。 - 50GBまでスナップショットが無料
スナップショットはVMの状態をDocker Imageとして保存する機能。VMの課金を止めるにはVMを削除しなければならないため、スナップショットでVMを復元できることは重要だ。
Ubuntu 22.04 LTSの初期状態で7.8Gくらいだったので50GBあればいい感じ - 株主優待が使える: GMO(9449)で年間1万円分
他に1時間ごとの時間課金制のVPSは「WebArena Indigo」しかなさそう。
WebArenaは正直ConoHa VPSより安くて魅力的だ。でもスナップショットが課金される。まあ20GBで月110円だから大したことない。でも回線速度が遅いらしい。
WebArenaには株主優待の割引がなさそうだったのでConoHa VPSを選んだ。このリンクから申し込むと800円分のクーポンがもらえます!これで2GBメモリなら200時間遊べるドン!
使い方や機能を軽く紹介
conoha-clientはpython3.10以上が使える環境ならばpipで簡単に導入できる。以下はlinuxにてインストール&helpオプションを使ってみた例だ(v0.4.1を使用)。ちなみに「ccli」はConoha-CLIentの略。
// WSL2
$ pip install conoha-client // インストールするとccliコマンドが使えるようになる
$ which ccli // 私の環境だとここに実行ファイルができた
/home/gotoh/.pyenv/shims/ccli
$ ccli version // バージョン確認
conoha-client 0.4.1
$ ccli --help // 使い方を調べるには --helpオプション
Usage: ccli [OPTIONS] COMMAND [ARGS]...
root.
Options:
--help Show this message and exit.
Commands:
ls list VM as human friendly
lsimg list image
lsinvoice 課金一覧.
lsorder 契約一覧.
lspaid 入金履歴.
lsplan List vm plan.
lsvm list VM as human friendly
snapshot スナップショット=ユーザーがVMから作成したイメージ.
sshkey キーペアCRUD.
version Show self version.
vm VM操作関連
$ ccli vm --help // サブコマンドの使い方も調べられる
Usage: ccli vm [OPTIONS] COMMAND [ARGS]...
VM操作関連
Options:
--help Show this message and exit.
Commands:
add VM新規追加
boot VM起動
ls 契約中サーバー一覧取得コマンド.
reboot VM再起動
rebuild VM再構築
resize VMのメモリサイズを変更.
resize-confirm VMののリサイズ確定.
resize-revert VMののリサイズ取り消し.
rm VM削除
rm-gracefully 追加課金される前にVMを保存・削除する
stop VMシャットダウン
ConoHa APIを単純に呼び出すよりも高機能なコマンド「ccli vm rm-gracefully」が登場したついでにアピールさせてほしい。この機能が使いたくて本ツールを開発し始めたと言っても過言ではない。
優雅な削除(graceful remove)と名付けたこの機能は以下のように動作する。
- 指定したVMの作成から経過した時間を監視する
- 経過時間が指定した時間(e.g. 1h)を超過して追加で課金される直前にVMを片付け始める
- VMをシャットダウンする
- VMの状態をスナップショットとして保存する
- VMを削除して追加課金が出ないようにする
様々なAPIを呼ぶ複雑な機能であることが伝わっただろうか。他の既存ツールでもVMのシャットダウン・削除・一覧表示やスナップショットの保存などは可能だ。しかし、これらの単純な機能に対応するコマンドが1つずつ提供されているだけで気が利かない。これが「他ツールはConoHa APIの単純なクライアントに過ぎず」と前述した理由だ。しかも、ConoHaのバージョン変更に未対応で放置された既存ツールばかりだった。
宣伝(アフィリエイト)
個人開発でリリースまで漕ぎ着けたのははじめてだったし、特定サービスのアフリエイトプログラムにも初参戦してみたのでバナーを置く。こちらでも200時間遊べるドン!
※参考
- ssh設定が必要なのはVMを立て直したときにいちいちVMのIPアドレスが変わってしまうため
コメント