APC 技術ブログ

株式会社エーピーコミュニケーションズの技術ブログです。

株式会社 エーピーコミュニケーションズの技術ブログです。

Object Pascal(FreePascal/Lazarus)で書いたアプリをAzure Container Appsで動かしてみる

はじめに

こんにちは、ACS事業部の東出です。
こちらはエーピーコミュニケーションズ Advent Calendar 2022 18日目の記事となります。
(フライングになっちゃうけどもう書いたから公開しちゃいます)

qiita.com

前回以来、久々の投稿です。

本記事の動機

いきなりですが皆様、Delphiはご存知でしょうか?
Object Pascalの統合開発環境であり、Object Pascalを拡張した言語(Delphi言語)というものです。

ja.wikipedia.org

私は社会人になって10年超、Delphiで開発されたクラサバのパッケージソフトのエンジニアをやっていました。私にとってDelphiは親みたいなものなのですが、最近めっきり利用することがなくなりました。

そこで、久々にDelphiっぽい環境で作ったアプリを、今の仕事に絡めてAzure Container Apps(以下、ACA)で動かしてみよう、と思い立ちました。おそらく需要はありません。誰得案件です。

ただ、DelphiのIDEのライセンスを買うお金はないので、FreePascal + LazarusというOSSの互換環境でアプリを作ってためそうと思います。

ja.wikipedia.org

流れ

  • Lazarusの開発環境を準備する
  • Lazarusで開発したアプリをdockerイメージ化する
  • ACAの環境を準備する
  • dockerイメージをデプロイしてアプリを動かしてみる

やってみる

Lazarusの開発環境を準備する

Ubuntuデスクトップ環境のセットアップ

Azure VMでUbuntuのデスクトップ環境を立てます。
(VM自体の立て方は今回割愛いたします、、、)
(デスクトップ環境の作り方は、下記を参考におこなえばOKです)

learn.microsoft.com

環境ができて、リモートデスクトップで接続するとこんな感じのデスクトップ画面が表示されます。
かわいいねずみさんがいますね。

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を選択します。

こちらの記事を参考にサンプルコードを書きます。

wiki.freepascal.org

後々の流れに合わせて、helloheadersという名前で保存します。

IDE上ではこんな感じになります。

そして、コンパイル→実行してみます。

http://<azure vmのpublic ip>:8080にアクセスしてみて、こんな感じでレスポンスが返ってきたらOKです。

※上記の動作テストをするには、AzureVM側でポート8080への受信許可設定をしてあげる必要があります。

dockerイメージ化

Ubuntu環境にdockerをインストールします。

参考

sid-fm.com

こちらの記事を参考にdockerイメージを作ります。

wiki.freepascal.org

docker runして、http://<azure vmのpublic ip>:8080にアクセスした結果、先程と同じようなレスポンスが返ってきたらOKです。

ACAの環境を準備する

リソースの作り方は過去の記事を参考になさって頂ければと思います...

techblog.ap-com.co.jp

dockerイメージをデプロイしてアプリを動かしてみる

dockerイメージをACRにpushします

先程作ったdockerイメージを、以下参考記事の手順でACRにプッシュします。

tech-lab.sios.jp

pushしたイメージをACAでpull→動かすようにします

コンテナーアプリ -> リビジョン管理 で新しいリビジョンを作成 をクリックします

コンテナーイメージを追加します。 レジストリやイメージ・タグなどの情報を入力します。

このような形でコンテナーイメージが追加されたらOKです。

作成ボタンをクリックすると、プロビジョニングが始まります。 ステータスがProvisionedになるとOKです。

あとはIngressの設定でターゲットポートを8080に変更します。

動作確認

コンテナーアプリの概要に記載されているアプリケーション URLにアクセスします。
下のようなレスポンスが返ってきたので、Lazarusで作ったアプリがACAで動いていることが確認できました。
Host欄のURLを見ると、ACAのURLになっていますね。

おわりに

Delphiは主にネイティブアプリ(デスクトップ・スマホアプリ)を作るのに使われるイメージがあります。あとはWindowsサービスアプリなど。。。
なので、ACAでDelphiアプリを動かすシーンは中々無いんだろうな、と思います。
一方、コンテナ化さえできれば自分の好きな言語でクラウドネイティブな開発ができる、ということでもあるのかな、と思います。

今後、機会があればCOBOLアプリケーションをACAで動かすなんてこともtryしてみたいです。
(COBOLってコンテナ化できんねや、、、と知って試してみたくなりました)
(メインフレームのモダナイズ先にACAとか使われたりする可能性・・・?なんかも頭をよぎりました)

qiita.com