CodeZine(コードジン)

特集ページ一覧

プログラミングコンテストに挑戦を――効率の良いアプリケーション開発方法を実演【デブサミ2020夏】

【A-6】【老舗DBベンダーが毎月開催】Git/コンテナを使ってプログラミングコンテストで腕試し

  • LINEで送る
  • このエントリーをはてなブックマークに追加
2020/08/24 12:00

 DBMS「InterSystems IRIS Data Platform」の提供元として知られる老舗DBベンダーのインターシステムズでは、REST APIやAI/ML+DBアプリケーションのプログラミングコンテストを毎月開催している。本セッションでは同社教育サービス担当の飯島美穂子氏が登壇し、コンテストで使用している開発用テンプレートの解説と、効率の良いREST+データベースアプリケーション開発方法を実演した。記事を参考に、腕試しをしてみてはいかがだろうか。

インターシステムズジャパン株式会社 教育サービス担当 飯島美穂子氏
インターシステムズジャパン株式会社 教育サービス担当 飯島美穂子氏

インターシステムズのプログラミングコンテスト、日本初の受賞者になれるチャンス

 日進月歩のアプリケーション開発において、最新の開発技術に対応していくことは重要課題だ。インターシステムズでは、1978年より新しい技術に対応しながらデータベース開発一筋に取り組み続けてきた。データ分析機能を追加したり、データベースでありながらシステム連携の基盤を搭載したり、近年では機械学習分野のAutoMLにも取り組む。そうしたさまざまな開発技術に対応し、「選択の自由」を重視したDBMSが同社が提供する「InterSystems IRIS Data Platform(IRIS)」だ。

 インターシステムズではエンジニア支援を目的として、この「IRIS」とさまざまな技術を活用し、プログラミングを競い合うコンテストを毎月開催。投票による優秀作品には賞金も用意されているという。コンテストでは参加者にプログラミングを楽しんでもらうために、短時間で簡単に開発環境を準備し、すぐにプログラミングに注力できるよう、開発環境のテンプレートとしてコンテナを利用した作成手順を提供している。なお、テンプレートはコンテスト以外の用途でも自由に使えるようになっている。

 すでに4月~12月までのコンテスト開催内容が決まっており、8月はFHIRアプリケーション、9月はフルスタックアプリケーション、10月はInteroperability(相互運用性)機能のアダプター作成、11月はIRISを使用したマルチモデルソリューション、12月はIRISを使用したInteroperability(相互運用性)ソリューションと続く。飯島氏は「いずれもいまだ日本からの応募がなされておらず、初の受賞者となる可能性もある。ぜひ、腕試しとして参加してみてほしい」と強調した。詳細はこちらで確認できる。

簡単に開発環境を用意できるコンテナを用いた開発環境テンプレートとは?

 それでは、コンテナを利用したプログラミングコンテスト用の開発環境テンプレートとはどのようなものか。飯島氏は、実際のコンテストで利用していたテンプレートを例に取り、中身を解説しながら「何ができるか」を紹介した。

 6月/7月は「AI/MLソリューション」がテーマとなっており、次のような準備が必要とされた。

  • 機械学習ができる環境(Python、Rなど)と使用するライブラリのインストール
  • データベースに接続するために必要なモジュールの準備
  • データ提供元となるデータベース(InterSystems IRIS)の準備

 しかし、コンテナを使わずにはじめから手動で用意するのは大変だ。そこで、「便利な開発プロセス」を利用できるよう用意されているのが開発環境テンプレートだ。ソースコードはGitで公開されており、そこにはDockerfileなども含まれる。ローカルに落としたコンテナを開始するだけで開発環境が整うわけだ。

 6月/7月開催分では、Docker Hubでイメージを公開している「IRISのコンテナ」と「Jupyter Notebook サーバー/TensorFlow 2.2/JDBC用Python3ライブラリ(JayDeBeApi)を含んだコンテナ」の2つが用意されており、両者間のネットワーク接続も準備した状態でテンプレートが完成する。

 飯島氏は、「テンプレートには開発環境の土台の部分が提供されていると考えていただければ。準備が整っているので、日頃Jupyter Notebookを使用している人ならすぐに自由にプログラミングができる」と語る。

 また、接続方法など全ての情報を公開しているため、その他の方法を選択できる。なお、IRISのイメージはDocker Hubで公開されている。「InterSystems」と検索して無料版の「IRIS Community Edition」を選び、バージョンアップが頻繁に行われているため最新のタグ名を選ぶようにしたい。

 テンプレート起動までの手順としては、コンテスト告知ページで情報をチェックし、InterSystemsの開発者がサンプルやライブラリを共有する公開ポータル「Open Exchange」でテンプレート情報の確認を行ったら、Gitへ移動してローカルにクローンするためのURLをコピーし、その中に含まれるコンテナを起動させればすぐにプログラミングを開始することができる。月によってコンテストの内容は変わり、開発環境テンプレートもそれぞれ変わるが、起動までの手順はほぼ変わらない。

 5月開催の「Native APIの回」では、「機械学習チャットボット」を開発したブラジルのBanzaiさんが優勝した。IRISに接続するにはSQLはもちろん、ObjectやJSON、XML、Key-Valueなどの形式が使え、言語もJavaやNode.js、Python、.NETから選択できる。BanzaiさんはPython Native APIを使用してPythonとIRISを組み合わせて、チャットボットで会話したデータをIRISに格納し、機械学習のトレーニングデータとして利用するものだ。また、データをIRISに格納し、Pythonの便利なグラフ用ライブラリを使用してCOVID-19に関するチャートも作成し、応募していたという。こうした応募作品は全て「Open Exchange」で公開されているので、参考にすると良いだろう。

5月開催の「Native APIの会」で優勝したブラジルのBanzaiさんの作品:COVID-19に関するチャート
5月開催の「Native APIの回」で優勝したブラジルのBanzaiさんの作品:COVID-19に関するチャート

テンプレートの準備からサンプルの実行確認までを実演

 続いて飯島氏は、4月開催の「REST APIコンテスト」で使用した「RESTサーバ作成用テンプレート」を用いて、実行確認とコンテスト応募までの流れを紹介した。IRISの独自スクリプト、ネイティブ言語である「ObjectScript」を使用することで、データが存在する場所でRESTサーバが作成できる。

 まずテンプレートで準備されるのは、下図の緑のラインで囲まれた範囲だ。まずDockerでIRISのイメージをPullしてコンテナを開始する。その時、微細な初期設定も行うが、今回は「RESTディパッチクラス」と呼ばれるロジックのサンプルコードがあらかじめおかれた。また不変であるのが一般的だが、この中では簡単に試せるように「Sample.Person」というテーブル定義でデータが入れられるよう準備されている。

 図ではデータベースの中にテーブルとコードが同居していることを不思議に思われるかもしれないが、データも定義、ロジックも全てデータベースに収めるのがIRISの標準構造だ。また、データベースを利用するにはVSCodeなどと同様、ワークスペース相当のもの、仮想の作業の環境が必要になる。IRISの場合、ネームスペースといい、データベース名と同じ「IRISAPP」と名付けられる。

 この時点でサンプルコード、データの格納場所がそろい、さまざまなテストができるが、さらにRESTクライアントから接続する部分が必要になる。なおテンプレートにRESTクライアントは含まれていないため、コンテストでは新たに作成するのもよし、またサーバー側の機能をより開発する、新しいものを登録するのでも構わない。

 実演ではRESTクライアントとしてPostmanのツールを使用した。RESTでアクセスするためのベースURLがあり、IRISに接続してURLがきたらRESTサーバの機能が動く仕組みになっている。初期の設定の中で、Webアプリケーション定義ができる場所があり、その中でベースURLが来たらディスパッチクラスが動くように設定されている。そのため、コンテナを開始して環境が立ち上がったら、すぐに準備しているサンプルコードを動かせるというわけだ。

 そしてRESTディスパッチクラスを改良するためには、IDEが必要になる。その場合はVisual Studio Codeでつなげ、ソースコードを修正する必要がある。標準ではInterSystemsのネイティブ言語「ObjectScript」の操作ができないため、Extensionからの追加が必要となる。

 飯島氏はこれらを実演するため開発用テンプレートのコンテナを開始し、準備されているサンプルコードがIRISで動くまでをテストしてみせた。

テンプレートで準備されるRESTサーバ作成環境
テンプレートで準備されるRESTサーバ作成環境

InterSystems開発者コミュニティの日本語版が公開

 こうしてテンプレートを活用し、そのままコンテナを開始してプログラミングを行った後は、リモートGitにソースコードをPushしてInterSystems開発者コミュニティでアカウント作成を行い、Open Exchangeに移動してGitにPushしたアプリケーションを登録し、画面をリロードして応募ボタンを押すとコンテストへの応募が完了する。

 飯島氏は「コンテナの利用により、データベースだけでなく必要な開発言語やモジュールを含めた開発環境が簡単に準備できる。コンテストに限らず、開発/テスト環境についても、コンテナを再利用すれば準備時間が大幅に短縮でき、本当にやりたいことに専念する時間が増える」と語り、「ぜひとも、いつものデータベースの1つとしてInterSystems IRISを活用してほしい」と強調した。

 また7月16日には、開発者同士の交流の場である「InterSystems開発者コミュニティ」の日本語版が公開されている。インターシステムズからのイベント情報や技術情報などが提供される他、コンテストの告知はもちろん、「はじめてのInterSystems IRIS」としてセルフラーニングも用意されている。現在、英語版/スペイン語版が公開されていて、2020年6月時点で7177名の登録があり、日本語版が公開されることでますます増えることが予想される。

 飯島氏は「プログラミングコンテストなどを通じて、世界の開発者とつながることができる。ぜひともコミュニティに参加し、コンテストに応募をしていただきたい」と語り、セッションを終えた。

関連リンク

  • LINEで送る
  • このエントリーをはてなブックマークに追加

著者プロフィール

  • CodeZine編集部(コードジンヘンシュウブ)

    CodeZineは、株式会社翔泳社が運営するソフトウェア開発者向けのWebメディアです。「デベロッパーの成長と課題解決に貢献するメディア」をコンセプトに、現場で役立つ最新情報を日々お届けします。

All contents copyright © 2005-2021 Shoeisha Co., Ltd. All rights reserved. ver.1.5