ConoHa VPSをコマンドラインで操作するCLIツール「conoha-client」を個人開発した(初)

スポンサーリンク

対象読者

  • PCスペックが貧弱で困っている方 e.g. メモリ8GB
  • PCを新規購入せずに安く開発環境を強化したい方
  • 様々なLinuxディストリビューションをサブPCなしで試したい方
  • Python3.10以上が使える方
  • ターミナルでのコマンド操作が可能な方

結論

はじめて個人開発したツールを公開した。「ConoHa VPS」のVM(=Virtual Machine=サーバー)をCLIから操作するためのツールである。
自分だけが使うのでも十分だけど、他の人にも利用してもらえたらもっと嬉しいので「conoha-client」を布教するためにこの記事を書く。

conoha-client
ConoHa VPS用CLI (2023.11)
GitHub - shogogoto/conoha-client
Contribute to shogogoto/conoha-client development by creating an account on GitHub.

他の既存類似ツールより完成度が高いと自負している自信作だ。根拠は以下の2点。

  1. 他ツールはConoHa APIの単純なクライアントに過ぎず、VMの作成・削除・保存、ssh接続設定を頻繁に行うには不便なものしかなかった。そんな不満を解消するために自作したツールだから
  2. 高品質なソースコード:すなわち、テスト駆動開発や自動テスト、型ヒントや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時間毎の時間課金制がある
    サーバーなど以外で1日24時間・1ヶ月をぶっ通しで使うことはできないので、時間課金制以外は開発環境として使うにはかなり無駄が多い。
  2. 50GBまでスナップショットが無料
    スナップショットはVMの状態をDocker Imageとして保存する機能。VMの課金を止めるにはVMを削除しなければならないため、スナップショットでVMを復元できることは重要だ。
    Ubuntu 22.04 LTSの初期状態で7.8Gくらいだったので50GBあればいい感じ
  3. 株主優待が使える: 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)と名付けたこの機能は以下のように動作する。

  1. 指定したVMの作成から経過した時間を監視する
  2. 経過時間が指定した時間(e.g. 1h)を超過して追加で課金される直前にVMを片付け始める
    1. VMをシャットダウンする
    2. VMの状態をスナップショットとして保存する
    3. VMを削除して追加課金が出ないようにする

様々なAPIを呼ぶ複雑な機能であることが伝わっただろうか。他の既存ツールでもVMのシャットダウン・削除・一覧表示やスナップショットの保存などは可能だ。しかし、これらの単純な機能に対応するコマンドが1つずつ提供されているだけで気が利かない。これが「他ツールはConoHa APIの単純なクライアントに過ぎず」と前述した理由だ。しかも、ConoHaのバージョン変更に未対応で放置された既存ツールばかりだった。

宣伝(アフィリエイト)

個人開発でリリースまで漕ぎ着けたのははじめてだったし、特定サービスのアフリエイトプログラムにも初参戦してみたのでバナーを置く。こちらでも200時間遊べるドン!

※参考

  1. ssh設定が必要なのはVMを立て直したときにいちいちVMのIPアドレスが変わってしまうため
その他
スポンサーリンク
ごとぅーんをフォローする
スポンサーリンク
スモビュ!

コメント

タイトルとURLをコピーしました