はじめに
こんにちは、ACS事業部の東出です。
こちらはエーピーコミュニケーションズ Advent Calendar 2022 18日目の記事となります。
(フライングになっちゃうけどもう書いたから公開しちゃいます)
前回以来、久々の投稿です。
本記事の動機
いきなりですが皆様、Delphiはご存知でしょうか?
Object Pascalの統合開発環境であり、Object Pascalを拡張した言語(Delphi言語)というものです。
私は社会人になって10年超、Delphiで開発されたクラサバのパッケージソフトのエンジニアをやっていました。私にとってDelphiは親みたいなものなのですが、最近めっきり利用することがなくなりました。
そこで、久々にDelphiっぽい環境で作ったアプリを、今の仕事に絡めてAzure Container Apps(以下、ACA)で動かしてみよう、と思い立ちました。おそらく需要はありません。誰得案件です。
ただ、DelphiのIDEのライセンスを買うお金はないので、FreePascal + LazarusというOSSの互換環境でアプリを作ってためそうと思います。
流れ
- Lazarusの開発環境を準備する
- Lazarusで開発したアプリをdockerイメージ化する
- ACAの環境を準備する
- dockerイメージをデプロイしてアプリを動かしてみる
やってみる
Lazarusの開発環境を準備する
Ubuntuデスクトップ環境のセットアップ
Azure VMでUbuntuのデスクトップ環境を立てます。
(VM自体の立て方は今回割愛いたします、、、)
(デスクトップ環境の作り方は、下記を参考におこなえばOKです)
環境ができて、リモートデスクトップで接続するとこんな感じのデスクトップ画面が表示されます。
かわいいねずみさんがいますね。
FPC(Free Pascalコンパイラ) とLazarus をUbuntu環境にインストールします。
公式ページからパッケージを入手して、インストールします。
今回は以下3つのパッケージを入れました。
- fpc-laz_3.2.2-210709_amd64.deb
- fpc-src_3.2.2-210709_amd64.deb
- lazarus-project_2.2.2-0_amd64.deb
インストールが終わると、Applications -> Development にLazarusのランチャーができています。
ランチャーを立ち上げてみます。チーター?がかっこいいですね。
あとチーターが乗ってるギリシャ神殿風の柱が、Delphiっぽさを醸し出していますね。
IDEの見た目はIDelphiユーザーおなじみの感じですね。
Lazarusで開発したアプリをdockerイメージ化する
まずはサンプルアプリの作成
新規プロジェクト作成でProgram
を選択します。
こちらの記事を参考にサンプルコードを書きます。
後々の流れに合わせて、helloheaders
という名前で保存します。
IDE上ではこんな感じになります。
そして、コンパイル→実行してみます。
http://<azure vmのpublic ip>:8080
にアクセスしてみて、こんな感じでレスポンスが返ってきたらOKです。
※上記の動作テストをするには、AzureVM側でポート8080への受信許可設定をしてあげる必要があります。
dockerイメージ化
Ubuntu環境にdockerをインストールします。
参考
こちらの記事を参考にdockerイメージを作ります。
docker run
して、http://<azure vmのpublic ip>:8080
にアクセスした結果、先程と同じようなレスポンスが返ってきたらOKです。
ACAの環境を準備する
リソースの作り方は過去の記事を参考になさって頂ければと思います...
dockerイメージをデプロイしてアプリを動かしてみる
dockerイメージをACRにpushします
先程作ったdockerイメージを、以下参考記事の手順でACRにプッシュします。
pushしたイメージをACAでpull→動かすようにします
コンテナーアプリ -> リビジョン管理 で新しいリビジョンを作成
をクリックします
コンテナーイメージを追加します。 レジストリやイメージ・タグなどの情報を入力します。
このような形でコンテナーイメージが追加されたらOKです。
作成ボタンをクリックすると、プロビジョニングが始まります。
ステータスがProvisioned
になるとOKです。
あとはIngressの設定でターゲットポートを8080に変更します。
動作確認
コンテナーアプリの概要に記載されているアプリケーション URLにアクセスします。
下のようなレスポンスが返ってきたので、Lazarusで作ったアプリがACAで動いていることが確認できました。
Host
欄のURLを見ると、ACAのURLになっていますね。
おわりに
Delphiは主にネイティブアプリ(デスクトップ・スマホアプリ)を作るのに使われるイメージがあります。あとはWindowsサービスアプリなど。。。
なので、ACAでDelphiアプリを動かすシーンは中々無いんだろうな、と思います。
一方、コンテナ化さえできれば自分の好きな言語でクラウドネイティブな開発ができる、ということでもあるのかな、と思います。
今後、機会があればCOBOLアプリケーションをACAで動かすなんてこともtryしてみたいです。
(COBOLってコンテナ化できんねや、、、と知って試してみたくなりました)
(メインフレームのモダナイズ先にACAとか使われたりする可能性・・・?なんかも頭をよぎりました)