00:13
皆さん、こまるんちんは、こまるです。 本日は、Pythonのプロジェクトをデプロイしたお話についてですね、語りたいと思います。
今回ですね、自分でオリジナルのサービス、ウェブサービスを作りました。 言語は、Pythonを使っているんですけれども、
そちらをですね、実際のウェブサービスとして公開するにはですね、ウェブサーバーにデータをアップロードしてですね、他のユーザーさんも利用できるようにしていかないといけないんですけれども、
開発の専門用語でこの作業をデプロイって言ったりするんですけれども、その流れといいますか、苦労した点などを含めてですね、どんな作業をやってきたのかなというところをですね、自分の振り返りも含めてお話していきたいと思います。
プログラムの話になってきますので、専門用語がですね、いろいろ出てきてしまうかもしれないんですけれども、もしご興味があれば最後まで聞いていただければ嬉しいです。
まず開発環境についてです。Windows 11とPythonがですね、バージョン3を利用しております。肝心のですね、開発したサービス、どんなものを開発したのかといいますと、
PRPGのですね、立ち絵、キャラクターの画像ですね。あちらのイラストの背景をAIを使ってですね、自動的に除去するというツールがメインとなっております。
その他ですね、2つ機能が今実装されているんですけれども、もう1つは音声のデータをアップロードして、音質、ファイルサイズをですね、下げて圧縮する、軽くするという機能ですね。
そしてもう1つが動画ファイルをアップして、それをココポリアとかFVTTで使えるような形式ですね、WebPだったりAPENGなんかにですね、変換圧縮する機能、こちらを実装しております。
既にですね、デプロイしてリリースしておりまして、皆さんでもご利用いただけるようになっておりますので、ご興味がある機能があったらですね、ぜひぜひお試しで使ってみてください。無料でご利用いただけます。
03:06
機能の特徴としてですね、メインの機能が背景を除去するという機能なんですけれども、学習されたAIのモデルを使ってですね、背景を自動的に認識して削除する。そして背景を透過にするということを行っています。
特徴的なのがですね、キャラクターイラストの画像用にですね、特化してチューニングされた学習モデルを利用しておりますので、PRPGの立ち絵、キャラ画像ですね、そちらの背景除去にですね、特化したという尖った機能となっております。
逆にですね、キャラクターイラストじゃないものは背景がうまく消せなかったりしますよ。そのほか複数の画像ファイルを一括で背景除去したりだとか、背景が消される前のbeforeですね、あとは消された後のafter、before afterのプレビュー機能を搭載していますので、これがですね、結構面白いかなと思います。
ではですね、デプロイの話をしていきたいと思うんですけれども、まずですね、デプロイするサーバーというのを選定しなくちゃいけないんですけれども、基盤、動かす基盤ですね、インフラとかいったりしますけれども、そちらのインフラをですね、どこにしようかなというところなんですが、今回ですね、いろいろ調べて、Python Anywhereというクラウドサービス。
こちらにデプロイをしております。こちらのPython Anywhereは、Pythonのプログラミング言語に特化したクラウドサービス、デプロイをして使えるというサービスとなっておりますので、Pythonだけでですね、実装しているものはですね、非常に相性が良くてですね、デプロイとか運用がスムーズに行えるというのが特徴的なクラウドサービスです。
まずですね、Python Anywhereでアカウントを作成しまして、無料プランもあるんですけれども、無料枠だと制限がかなり厳しいので、今回私が作ったサービスですね、無料プランだとちょっとしんどいところがありましたので、課金をして有料プランですね、にしております。
課金するときにいろんなプランがあるんですけれども、Python Anywhereの良いところがですね、CPUだとかメモリ、ウェブサービスとかですね、利用時間、そういったものをですね、細かく自分でカスタムできるようになっているんですよね。
例えばCPUの数を増やすといくら毎月利用量が増えますよ、メモリを増やすといくら増えますよ、みたいな感じでですね、決まったプラン、よくあるのがスタンダードプランとかプロプランとかエンタープライズプランとかっていうので、プラン分けされているようなサービスが多いかと思うんですけれども、
06:22
このPython Anywhereは自分がデプロイしたいウェブサービスに合わせて、サーバーのスペック、性能ですね、これを細かくチューニングする、それで必要最小限のコストに抑えることができるというところがですね、非常に気に入っているところです。
今回ですね、Pythonの言語を使って開発しているんですけれども、その中で使っているライブラリでですね、Streamlitというのを主に使っています。
このStreamlitというのは、Pythonでウェブの画面ですね、UI、ユーザーインターフェースを操作する画面とかボタンとかですね、そういった機能をですね、あらかじめその部品を用意してくれるサービスが、モジュールと言えばいいですかね、そういったモジュールがですね、提供されていたりするんですけれども、
今回はそのStreamlitというのを使ってですね、開発効率を上げているというところがあります。
このStreamlitというのはですね、非常に簡単にですね、UIを構築できる便利な画面ですね、ファイルサイズがちょっと大きいんですよね。
なので、無料プランでデプロイするにはディスク容量がちょっと足らなかったということで、課金は必須になっちゃうかなというところでした。
最初ですね、Python Anywhereじゃなくて、レンダーっていうクラウドサービスですね、そちらをですね、運用の第一広告として準備をしてたんですけれども、レンダーの有料プランっていうのは、一番安いプランでもですね、毎月US19ドルかかっちゃうんですよね。
なので、お試しで契約するにはちょっとお高いかなーっていう感じですよね。500円ぐらいだったらね、手軽に試せるんですけれども、19ドルだとね、2500円とかしちゃうのかな。
そうするとね、なかなかね、それをお試しで払うのもちょっと気が引けちゃう。手が出しにくい形態なのかなというふうに感じちゃうんですけども、レンダーのほかにですね、使えるものがないかなというので、いろいろ調べてて、
09:02
いろいろ計算してみたらですね、レンダーの半額以下でサーバ費抑えられそうだなっていうので、Python Anywhereに選択したということですね。また、Python Anywhereは30日間の返金サービスっていうのがあるので、もしお試ししてうまくできなかったっていうときですね、
30日間であれば返金をしてくれるという非常にありがたい手厚いサポートがついているので、これもこのサービスをですね、選択する一つのポイントになったんじゃないかなというふうに思っています。
こういったですね、裏側のユーザーサポートの面ですよね。そういうところが個人的に非常にそういう姿勢っていうんですかね。ユーザーフレンドリーな姿勢が気に入りまして、Python Anywhereをサーバーとして採用することに今回決定しました。
Python Anywhereで契約をしまして、デプロイの準備を進めていくんですけれども、Python AnywhereではWebコンソール、インターネットでブラウザーを開いて、ブラウザーの画面上で設定とかファイルのアップロードっていう作業ができるようになっているんですけれども、
そのWebコンソールでファイラーの機能とですね、バッシュのコンソールですね。LinuxのWindowsで言うコマンドプロンプトですかね。そちらがWebから利用できるようになっています。
このね、バッシュのコンソールが使えるっていうところもですね、非常にポイントが高いところでして、レンダーのですね、無課金だとこのCUIでコンソールがですね、実は利用ができないというところが結構痛いんですよね。
ただ、レンダーにあってPython Anywhereにない機能っていうのもあるんですけれども、レンダーにあるこれあると便利だよなって思う機能は、GitHubのリポジトリと連携して自動でデプロイしてくれるっていうですね、Gitとの連携が非常に強力なところがレンダーの強みかなと思います。
なので、Pythonに限らずですね、他の言語でもレンダーは使えるっていうところがありますので、Python Anywhereとレンダーを比べたときですね、なかなか付けがたいところではあったんですけれども、今回はPythonに特化してやっていこうかなと思いましたので、Python Anywhereを選択したというところですね。
12:06
流れとしましてはですね、Python Anywhereでまずプロジェクトのフォルダを作成していきます。
Makedirですね。
次にプロジェクトフォルダに移動して、Pythonの仮想環境を作っていきます。
VMと呼ばれるものですね。
仮想環境をアクティベートして、そこにDipで外部のモジュールライブラリをインストールしていく。
このDipインストールしたときにですね、Streamlitの容量が大きくてですね、ディスク容量不足でエラーになって困ったというところで課金をした次第でございます。
これでとりあえずプロジェクトの設置は完了となったんですけれども、次にですね、これをWebサービスとして起動して公開するという準備が必要になるんですよね。
ただファイルをアップロードしただけだと動かないんです。
これをWebサービスとして動くように設定をしていかないといけないんですよね。
次どうするかというと、Python Anywhereの画面を開いて、Webというタブメニューがありますので、Webメニューを表示してですね、新しいWebアプリというのが作れるので、これで作成しようと思ったんですけれども、ここでですね、また問題が発生しました。
Python Anywhereはですね、従来のWSGI、Webサービスゲートウェイインターフェイスという言い方すると分かりにくいかな。
PythonのWebサービス開発されている方ですと、プラスクとかジャンゴという言い方したほうがヒントくるかもしれないですね。
そういったもののですね、ホスティングにPython Anywhereというのは特化していまして、ストリームリストのようにですね、ASGIベースのアプリケーションは直接サポートされてなかったんです。
いやこれは困ったぞということでですね、もしかして使えないのって思って色々調べてみたところ、現在ですね、これ収録しているのが2025年の7月15日になりますけれども、
ストリームリストのですね、公式ページ見てみたら、ベータ版として、ストリームリストの公式ページじゃないですね。
Python Anywhereの公式ページを調べてみたら、ベータ機能としてなんですけれども、ストリームリストのデプロイができるようになりましたよという案内がありましたので、
公式のヘルプページを見ながらですね、改めてデプロイ作業のやり直しをしていきました。
ここからですね、ストリームリストのデプロイをですね、改めてしていくということになりました。
15:03
流れとしてはですね、こんな感じです。まず1番目、APIトークンを発行します。2番目、Python Anywhereをですね、アップグレードする作業をします。
ピックインストール--アップグレード Python Anywhereという感じですね。仮想環境を作っていきまして、アクティベートをしていきます。
プロジェクトボルダーを配置して、これは先ほど既に終わっているので、ここまでは完了していますね。
次にWebアプリを公開するというコマンドがあるんですね。pa-website-createというのがあるんですけども、そちらのコマンドでWebアプリの公開設定をしていきます。
次に公開設定をしたらですね、Webサイトが公開されているかをチェックするという作業をして、デプロイをしていくという感じですね。
デプロイが終わった後ですね、Webアプリにアクセスしたところですね、502のBad Gateway Errorになってしまいました。
何がいけないんだっていうのをですね、ここからまた調査することになったんですけれども、Python Anywhereではですね、Webアプリを公開すると、
自動的にですね、アクセスログとエラーログ、サーバーログというファイルがですね、作成されて、勝手にロギングしてくれるんですね。
とっても親切な設計となっております。
ここでエラーログを確認してみたところ、iptablesで何やらエラーが出ているというのが分かったんですけれども、
エラーが出ているのは分かったけれども、その対象はですね、サーバー側じゃないとできないという問題がありまして、
顧客側の私のほうで何か手が打てる対策っていうのがない種類のですね、エラーでございます。
プロジェクト側じゃなくてですね、Python Anywhereのサーバー側の設定で何か問題が発生しているんじゃないのかなということですね。
なのでこちらでできる対処がないので、頑張ってですね、英語のサポート窓口へ問い合わせました。
もちろん日本語通じませんので英語で書いておくるんですけども。
海外のサービスなんでね、返答がいつ来るのかなっていうのがちょっと心配だったんですけれども、
数日、下手したら数週間おったらかしにされることも覚悟はしてたんですけれども、
そしたらですね、すぐに1日経たずに連絡が来たのかな。サポートから連絡が来ました。
なんですけれども、その連絡が来る前にですね、実は事故解決しちゃってまして、
18:06
アプリをですね、リロードしたらエラーが解消されてしまったということだったので、
特に問い合わせる必要はなかったんですけれども、ただですね、サポートがですね、迅速に対応してくれるというスピードの速さというのが実感できたので、
これは良かったかなと思います。トラブルに合わないほうが本当はいいんですよね。
いろいろ勉強になりましたね。
そしてそして、Webアプリに改めてアクセスしたところ、ちゃんと画面が表示されて、機能も使えることが確認できました。
Webサイトの名称ですね、これと言っていい名前が思いつかなかったので、
とりあえずですね、PRPGメディア変換ツールというWebサービスの名称でやらせていただいております。
今回試してですね、課題も見えてきておりまして、無事にデプロイまではできたんですけれども、
実はとっても致命的な課題を抱えていたりもします。
それはですね、ディスクサイズと処理時間ですね、の問題ですね。
ちょっとした小さいファイルだったらすぐに処理できるので、全然問題ないんですけれども、
先ほどですね、音声ファイルの圧縮機能があるというふうにご案内したんですけれども、
こちらになるとですね、急にファイルサイズの容量が必要になってしまうので、
そうするとですね、今のプランだとちょっと対応が難しいということでですね、
今実は上限のファイルサイズが20MBという非常にしょぼい上限で制限をかけさせていただいております。
とても心苦しい限りなんですけれども、ただね、サーバー費用を上限なしにかけていっちゃうのもですね、
それはそれで違うかなと思っていますので、一旦はですね、まず個人的な目標であった
Webサービスをまずは公開をして、リリースをしてですね、使ってもらうというところですね。
そこの目標は達成したかったので、一旦ですね、リリースをしていただいたという次第でございます。
このリソースの上限ですね、上げれば解決はできるんですけれども、
当初計画時のですね、運用費を超えてしまうことになるので、現状の構造ではちょっと無理があるかなというところでございます。
パフォーマンスの問題っていうのがですね、ちょっと直せば直るっていうものじゃなくて、
21:04
アプリケーションの構造そのものですね、根本から直さないと大きな改善を見込むのは難しいかなというところでございますので、
これに関してはですね、ちょっと別のアプローチのやり方ですね。
ある程度、目処は立ってはあるんですけれども、
まとまった時間が取れたですね、作り直す機会があれば、改めてですね、再チャレンジしていけたらなというふうに思っております。
ということでですね、今回はWebサービスをPython Anywhereでデプロイしたよという話についてお話しさせていただきました。
こちらのサービスですね、URLですね、Podcastの概要欄のところに貼っておきますので、
ぜひぜひですね、ご興味があったら試して使っていただけたら嬉しいです。
はい、ということで今回はこの辺で終わりとなります。
それではまたねー。