NEWS
IBM i アプリの第二の柱 OSS IBM i アプリの第二の柱 OSS
2023.02.02

【OSS】第9回「リアム・アランが語る Node.js及びオープンソース」

【OSS】第9回「リアム・アランが語る Node.js及びオープンソース」

リアム・アラン氏は、IBM i 上のNode.jsプログラミングの昌道者であり、VSCodeのRPG用拡張機能作成リーダーとしてオープンソースコミュニティでも著名な人物です。今回は、Node.jsがIBM iの適用領域をどう広げるかを知るために、IBM iにおけるNode.js及びそれに関連するその他のオープンソースの活用やオープンソース活動に関するリアム・アラン氏とチャーリー・グアリーノ氏の対談を要約、編集してお届けします。(編集部)

2022/6/9 チャーリー・グアリーノ

チャーリー・グアリーノ(以下、チャーリーと略します):みなさんこんにちは。チャーリー・グアリーノです。TechTalk SMB の別エディションへようこそ。今月は、リアム・アランさんに来ていただき、とても嬉しく思います。彼は私の友人の1人であると共に、間違いなくIBM i コミュニティにおける非常に大きな存在です。彼は Node.js や ILE の最新の開発ツールなど、オープンソーステクノロジーについて影響力のある昌道者であり、コミュニティでも非常に大きな役割を果たしています。リアム、ポッドキャストにようこそ。

リアム・アラン(以下、リアムと略します):こんにちは。 お呼びいただきありがとうございます。

Node.jsとIBM iの統合

チャーリー:私はあなたの名前から、単純にNode.jsとりわけIBM iでそのテクノロジーを実際に使用する方法を連想しますが、Node.jsがどこに適合するのか、それが実際何であるのか、そしてそれが自分のプラットフォームにどのように適合するかをよく理解していない人が大勢いると思います。その事について一般的に何が言えますか?

リアム:私の仕事の 80% は TypeScript と JavaScript を書いているという事実から始めようと思います。今私はほとんどの日々をそのことに費やしています。2~3年前は 50% 近くだったのですが、年々増加しています。ですから、私は常日頃Node.jsがIBM i とどのように統合できるかに重点的に取り組んでいます。IBM i 上のNode.jsに関して特に気に入っているのは、大量の入出力向けに作られていることです。大量のデータの処理を得意としていて、かつIBM i を使用しているほとんどの人は大量のデータを持っていますよね? Db2 for i は現時点で何十年にもわたって存在しています。人々はこのすべてのデータを取得しており、Node.js はAPIを介してそのデータを表現する優れた方法です。それは高速で、スループットが高く、標準で同期処理を行います。使いやすく、デプロイも簡単で、殊にコードを書くのが簡単です。私が好きな理由の1つは、20分以内に動くものが作れるという事実です。これは素晴らしいテクノロジーであり、現時点で10年以上存在しています。私はNode.jsを使う事を本当に楽しんでおり、他の人にも使用するよう勧めています。

チャーリー:それについては同意せざるを得ません。なぜなら、あなたが私の目の前で Node.jsを使ってコードを開発しているのを見て、プログラムが素早く出来上がることに本当に驚いたからです。あなたは既にNode.jsのいくつかの良い点について述べていますが、利用可能な他のオープンソース技術からNode.jsを際立たせている決定的なポイントはありますか?

リアム:良い質問です。私が気に入っているのは、統合と、アプリ内で利用できるオープンソース・パッケージの数です。非常に多くのパッケージが利用可能です。例えば、OpenAPI を使用する場合、定義したスキーマを活用するための非常に優れたモジュールがあり、それをAPIで検証ソフトとして使います。ですから、OpenAPI のスキーマでAPIを定義し、Webアプリで要求と応答のAPI検証を行うのにそれを利用できます。このすべてのモジュールとの統合は、間違いなく私のお気に入りです。 最近、注文リストからPDFとExcel文書の両方を生成するAPIを作っていますが、Node.js ではそれを高速に行えます。そのためのTypeScriptのコードは小さなものです。それは醜いかもしれませんが、正しく作れば非常に綺麗で扱いやすいものにできます。

チャーリー: VSCodeを使用したツールで、あなたが実際に物凄い速さで仕事をしているのを見ました。あのツールがあなたの迅速なアプリ開発にどのように役立っているか教えてください。

リアム:VSCode は素晴らしいテクノロジーの一つです。私はプログラムを書こうと思いません — これは、TypeScriptやJavaScriptを作成する時は必ずVSCodeを使う多くの人にとっても同じことだと思います。なぜなら、期待どおり構文ハイラインがあるだけでなく、膨大な量の拡張機能があるからです。コードフォーマッター及び構文チェッカーである ESLint の拡張機能があります。それはVSCode が持つ優れた機能の一部です。別の良い例は、Thunder Clientと呼ばれるものです。これは基本的にPostman(訳注1)ですが、VSCodeに組み込まれています。これは私のお気に入りの機能ですが、他にも多くの統合が行われており、デバッグ機能も備えています。実際、統合されたTypeScriptとJavaScriptのデバッグ機能が備わっており、これらのアプリを作成するときに利用するのに最適なツールです。それがなければ、私は間違いなく迷子になるでしょう。それは、すべてのリファクタリング機能(訳注2)を備えています。それはあなたのプロジェクト構造を知っています。本当に素晴らしい技術です。私はそれがなければ道に迷ってしまうので、間違いなく大ファンです。

チャーリー:あなたがVSCode を使って取り組み続けているRPGについて取り上げなければ、私は怠慢だということになるでしょう。それについて少し教えてください。

リアム:それは拡張機能であり、別の製品ではありません。VSCodeをお持ちの場合、これはインストールできる単なる拡張機能です。それが行うのは、IBM iオープンソースコードに接続してそれを変更する機能を追加すること、それがすべてです。VSCodeはコードを編集し、コンパイルします。それはすべての基本的な必要事項を行うだけでなく、RPGとCOBOLのアウトラインビュー、ピーク定義(訳注3)やgo to定義(訳注4)、そして参照など多くの素晴らしい機能も備えています。評価されたすべてのコンテンツが例えばRPG や COBOL などで機能することが分かっています。また、将来的には優れたSQLツールがいくつか登場するでしょう。この拡張機能及びそれと連携して機能するその他の拡張機能の背後にある考えは、IBM i 開発者の開発ライフサイクルを強化することに尽きます。この拡張機能は高速ですが、その本当の目標は開発を楽しく簡単にすることです。本当にそれが目標です。

チャーリー:Node.js の話に戻りましょう。Node.jsはRPGと上手く統合されているかが問題だと思います。Node.jsをRPG の代わりに使用しますか、それとも両者は上手く共存しますか?

リアム:Node.jsは間違いなく上手く共存するでしょう。それらは各々の環境で効率的ですが、Node.jsアプリがRPGと対話する最も簡単な方法は、間違いなくデータベースを介することです。なぜなら、JavaScriptであれTypeScriptであれ、Node.jsアプリはDb2と対話するためのODBCを活用でき、Db2はもちろんRPGプログラム、COBOLプログラム、任意のアプリ、任意のプログラム、サービスプログラムに非常に簡単にアクセスできるからです。このことは、Node.jsアプリがNode.js環境から活用できることを意味します。もちろんこれは PHPやPythonなどにも当てはまりますが、Node.js はTypeScript やJavaScriptを素早く作成するという点で特に際立っており、仕事を素早く片付けられます。それが主要な役割を果たしているポイントだと思います。

Node.jsを使いIBM i でIoT

チャーリー:私はオープンソース技術が、新たに出現した技術(例えばIoTなど)のいくつかで使用されているのを見てきました。Node.jsはこの議論に含まれると思います。私は、その分野で多くの素晴らしいことが起きていることや、あなたが私生活でもIoT装置をお持ちなのを知っています。それについて少し教えてください。

リアム:Node.js が本当に優れている点は、IoT の世界で上手く機能することです。ご存知だと思いますが、IoTの世界ではNode-REDが影響力を持っています。それが IBM i であろうと別のプラットフォームであろうと、Node-RED は確実にIoTデバイスを接続する原動力となり得ます。Node-REDは実際にIBM i上で動きますし、人々はそれを使用しています。それを使ってダッシュボードが構築されているのを見てきました。それは本当に素晴らしいツールです。マット・シーバーガー氏が IBM i上のNode-REDについて多くのことを書いていますので、詳しく調べることを強くお勧めします。私自身の経験で言えば、家でそれを使用することは喜びでしかありませんでした。私は非常に洒落た電気湯沸かしを持っています。温度を変更したり、オン/オフしたりできるダイヤルが付いていますが、実はその内部はRaspberryPiで、ネットワークに接続できます。ですから私はそれを接続し、オンにしたりオフにしたり、温度を設定することもできます。例えば、今が朝の 8 時だとして、前の晩に事前入力し、Node-RED が「朝の 8 時です。8 時 10 分に起きることになっています。自動で電源を入れ、自分の好みの温度に設定してみませんか?」と言う様に設定します。特定の温度に達したら、湯沸かしの電源を切ってお湯をそこに置いておきます。それがIoTです。それは別の装置と通信する小さな装置です。コーヒー店を持っていて、すべてのコーヒーマシンを自動的に制御したいと考えていると想像してみてください。IoTでそれができるのです。これは、これまでに使用した唯一の使用例です。まだあまり使っていませんが、本当に楽しいです。

チャーリー: IoT は製造業などで非常によく使われており、それに関して私は自分自身で研究も行っています。物のオンとオフを切り替えたり、様々な条件や状況を確認したりすることは重要ですが、その真の価値は一定期間にわたってそれを見て、それに基づいて予測できることであり、そこにIoTの未来があると思います。Node.jsがその分野でとても上手く機能することが分かります。

リアム:ええ、間違いなくそうですね。常にデータを収集する何万ものセンサーがあれば、平均値を計算して物事がどのように機能するかについて多くのことが学べます。そこには非常に多くの可能性があります。これは非常に素晴らしい技術です。

チャーリー:それは確かに素晴らしい技術です。湯沸かしさえもオン/オフしているという事実は本当に素晴らしいです。最近聞いた話では世の中に400億個くらいのIoT装置があるそうです。

リアム:ええ、実際に多くの人が持っている最も基本的なIoT装置はPhilips Hueです。これは、Wi-Fi に接続する電球の中にある小さなコンピューターであり、IoT装置として扱うことができます。これは、多くの人が持っていて、携帯電話から灯りを制御するときに使用します。それは皆の家にあるIoTであり、皆はその言葉すら知りません。それは本当に楽しいものです。

チャーリー:そして、それは始まりに過ぎません。洗濯機、冷蔵庫、オーブンなど、接続する家電製品は他にもたくさんあります。

リアム:エアコンは暫くの間、多少それを行っていたということです。温度計があり、暑くなり過ぎるとエアコンがオンになります。それは IoTの始まりに過ぎません。それは楽しくワクワクする挑戦です。

OpenAPIとGraphQL

チャーリー:ここで話しを切り替えて、お気に入りの技術について話しましょう。よく話題になるのは OpenAPI です。それはかなり頻繁に出てきます。それが何であるかを正確に知らない人のために、OpenAPIについて詳しく教えてください。また、OpenAPI があなたやこの分野に参入しようとしている人にとってなぜそれほど重要なのかを教えてください。

リアム:これには2つの視点があります。開発者の視点とビジネスの視点です。そして、実際にそれを考えることができるものは、APIがどのように機能するべきかに関する文書です。代表的な例を使って説明します。ちょうど4ヶ月前、私は新しいクライアントと作業を開始し、新たに Node.js API を構築したいと考えていました。そのほとんどは、API を介して実際に購入注文を入力できるように、在庫一覧を作成し、購買を行うためのものでした。実際に開発を行う前に、私はフロントエンドチームの2人と話し合い、バックエンドから得たいすべての事を文書化しました。もちろん、在庫のページを取得するためのAPIが必要でした。それは例えば一度に20個の品目の一覧を提供し、さらに詳細な情報を含む特定の項目を取得するための別のAPIが存在することになります。次に、例えば注文を行うための別のAPIがあります。素晴らしいのは、コードを書く前に彼等から提供された情報を取得し、これらのAPIがどのように見えるべきかを文書化できることです。つまり、その要求の入力は何か、JSON 本文がどのように見える必要があるかを文書化できます。そして、出力が何であるかを文書化することもできます。ですから、フロントエンドの人達は、API に何を期待するかを知っています。繰り返しますが、これは開発を行う前のことです。それから本当に素晴らしいのは、その API (私が作成した仕様、可能ならばスキーマ) を使用して、文書から基本的に特別なアプリを生成できることです。作成した文書と仕様に基づいて、基盤を整えるためのコードを書く必要さえありません。これで、この仕様をAPIの検証にも使用できるようになります。例えば、私が注文APIを作成した場合、JSON 本文には必要な品目の一覧、必要な数量、配送先住所など、そして支払い中であれば注意喚起のための縞模様をつけた情報を含める必要があるかも知れません。また、Node.jsアプリ内から仕様を使って、要求を検証できます。ですから、どこかで数量が欠けていたり配送情報が欠けていたりしても、私のコードに触れる前に、私の仕様がそれを捕えます。したがって、実際にはそれを文書に使用できるだけでなく、検証にも使用できます。OpenAPIが強力な理由はここにあります。なぜなら、これを仕様と検証の両方で使用できるからです。開発者が本当は心配する必要のない検証の追加レイヤーを加えることで、誰にとっても本当に楽になります。開発者とフロントエンドチームの作業を一気に簡単にするのは素晴らしいことだと思います。もちろん文書ができるのも素晴らしいです。コードを書く前に全員が同じ書き物を持つのは素晴らしいことです。APIが関係する場合は、すべてのプロジェクトで使用してきましたが、OpenAPI は非常に素晴らしいテクノロジーです。

チャーリー:同じ議論に関連している他の技術はGraphQLですよね? この分野を知らない多くの開発者にとってこれもまた新しい用語になると思います。GraphQLとは何かを教えてください。

リアム:例を挙げましょう。データベースがあり、通常そのデータベースを呼び出すために行うことは、SQL文を作成することです。例えば、部門表から全部門を選択し従業員表と結合すると、それらに関する情報が得られます。それがSQLという照会言語です。 GraphQLは、理論的には独自の種類の照会言語です。部門モデル、部門 ID、部門名だけでなく、その部門に所属する全従業員の情報についても必要な場合、それを一つの照会文で書きます。結合する必要はありません。すべての結合は自動的に行われますが、それは実際にはデータベースからデータにアクセスする別の方法にすぎません。そして、GraphQLが本当に優れている点はツールにあります。フロントエンド用のGraphQLクライアント、Express(訳注5)統合としてバックエンド用のGraphQLクライアントがあり、そして検証機能があって本当に素晴らしいです。Db2 について言えば、私は実際に Db2でGraphQLを使用する方法についてのブログ記事を書いたことがあります(訳注6)。基本的に、開発者は GraphQL のデータベースのスキーマを定義し、GraphQL照会を使用してデータベースからデータを取得できるようにします。ブログ記事では、実際に部門表と従業員表の例を使用しています。それは単にデータベースからデータを取得する別の方法ですが、表ではなくJSON形式で答えを返します。本当に素晴らしいです。

チャーリー:Twitter にリアムさんの素晴らしい投稿が沢山あります。彼のハンドル名は @notesofbarry です。そこで多くの有用な情報が見つけられると思います。あなたはGitHubに大きく貢献しており、GitHub にも多くの物を置いていますよね?

リアム:今話したGraphQLなどでさえもそうです。私のブログもGitHubでホストされていることはご存知でしょうが、GraphQLの実際のサンプルコードもGitHubで見つけられる筈です。そこでの私のハンドル名はworkofliamで、私が行うことはほとんどすべてGitHubに行き着きます。隠すことは何もありません。私の職業は請負業者であり、私の仕事の仲間として、分かち合いが思いやりであることを知っています。先に言ったように、私は共有すること、そしてそこからもっと学ぶことが好きです。私はオープンソースの世界の一部であるということから本当に恩恵を受けているので、私が行う多くの事は最終的に GitHubに行き着きます。それは本当に素晴らしいウェブサイトであり、素晴らしいツールです。オープンソースコミュニティにとっても素晴らしいことです。

オープンソースコミュニティ活動の意義

チャーリー:本当にあなたに感心していることの1つは、あなたの情熱だけでなくあなたが喜んで情報を自由に提供していることです。そして、コミュニティはあなたの貢献のお陰でとても良くなっていると思いますが、コミュニティに恩返しをしようと強く思う理由を教えてください。

リアム:実際、これは答えるのが難しい質問です。情熱はおそらく外向的な性格から来ていると思います。なぜなら、私は、コミュニティに恩返しできれば、それで間違いなく満たされるからです。人を助け、人に教えるのを手伝い始めるときに感じる気持ちが大好きなだけなのですが、他人を助けることで得られるのは、他人が私を助けてくれるということです。他人に教えることは、他人について学ぶと同時にその人があなたに何を提供できるかを学ぶようなものです。オープンソースが好きな理由はそこにあります。私はこの考えを持っていて、それをオープンソースとして公開しようとしているようなものです。なぜなら、私は他の誰かを助け、他の誰かが私に改善を提供してくれることを願っているからです。私が自由に利用できるようにした物に対する彼らの改善から私は学んでいます。そして私はチームワークが大好きです。それが理由だと思います。他の人と一緒に仕事をするのは本当に楽しいです。

チャーリー:それが善意の面白いところです。与えれば与える程、より大きな見返りを得続けるので、あなたはそれと縁を切ることはできません。そうでしょう?

リアム:そのとおりです。オープンソースは間違いなく私の人生を変えました。私が行っている仕事の多くは、オープンソーステクノロジーの分野で作業し、実際にオープンソースになるコードを書くことです。それは私の人生の楽しみの一つです。

チャーリー:これを締めくくる前に最後にお話ししたいのは、一般的な話です。カンファレンスに行くことを考えている人たちに何を伝えたいですか? また、カンファレンスに参加したときの気持ちはどのようなものですか?それがあなたをもっとワクワクさせるのは分かりますが、大勢の人の前で話をする機会を得たとき、何を思いますか?

リアム:オープンソースを実践することに例えることができます。オープンソースと同様に、私はあなたと情報を共有し、あなたから学ぶためにそこにいます。例えば、私が取り組んでいる事の話やデモを行ったりしているときに、何かを見て「それはいいやり方だと思うけど、それが動作する別の方法も知っている」と思うかもしれません。そして、私はそれについてあなたから学べる可能性があります。私は教える経験をするのが大好きですが、それは私があなたと繋がり、あなたについて学ぶ時でもあります。そして人中心の人間として、会話し、他の人が取り組んでいることについて学ぶのは、私にとって良い時間です。それが私にとって最高の部分です。

最後に

チャーリー:これらの技術の多くは誰にとっても非常に新しいものなので、最後にもう 1つ質問したいことがあります。この道を進むことを検討している、または考えている人への最後の助言は何ですか? 登るには大きな山ですか、それとも比較的簡単に登れる山ですか?

リアム:Node.js を使用するなら、正しい選択をしたことになります。私の意見では、JavaScript を始めるのが最も簡単で、オンラインには JavaScript のチュートリアルがたくさんあります。 非常に多くのチュートリアルがあり、TypeScriptも同様です。ブラウザでチュートリアルを実行することもできます。 VSCode をダウンロードする必要さえありません。 オンラインで対話形式のチュートリアルを行うだけで、JavaScript を学び、Node.js を理解できます。本当に新しいことを始めて何が起こっているのかを見たいだけなら、それは始めるのに最適な方法だと思います。最近はブラウザでできます。もちろん、次のステップは VSCode を入手し、Node.js をローカルにインストールして試してみることですが、始めるのはとても簡単です。数回クリックするだけです。

チャーリー:そして、あなたを助けるコミュニティがあります。

リアムそのとおりです。 私は手助けしたいと思います。 誰か助けが必要な場合は、遠慮なくTwitterで連絡してください。 私にDMを送ってください。 私達はそれを解決しますし、喜んで手助けします。

チャーリー: 有難うございます。以上で、今月のポッドキャストのまとめとします。 来月またお話しできることを楽しみにしています。さようなら。

  • 【訳注1】APIを設計、構築、テスト、反復するためのAPIプラットフォーム
  • 【訳注2】リファクタリングについては下記の記事を参照してください。
    → 【開発モダナイゼーション】第6回「リファクタリングの重要性」
    https://www.i-cafe.info/column/serials/dev_mod_6
  • 【訳注3】編集画面上の変数やオブジェクトの定義や参照箇所を表示する機能
  • 【訳注4】編集画面上のシンボルの定義文に移動したり、定義文のプレビューポップアップウィンドウを表示したりする機能
  • 【訳注5】Node.js Webアプリケーション・フレームワーク
  • 【訳注6】該当のブログ記事は以下のURLで読むことができます。
    https://worksofbarry.com/?post=44
いいねと思ったらシェア
twitter
facebook
hatena
IBM i アプリの第二の柱 OSS 目次を見る

この連載は…

IBM i アプリの第二の柱 OSS
関連記事
【OSS】第8回「Nginxを使ってウェブコンテンツを素早く動かす」
【OSS】第8回「Nginxを使ってウェブコンテンツを素早く動かす」
【OSS】第4回「IBM iのPythonを始めよう」
【OSS】第4回「IBM iのPythonを始めよう」
【OSS】第11回「簡単なGrafanaダッシュボードのデプロイ方法」
【OSS】第11回「簡単なGrafanaダッシュボードのデプロイ方法」
あなたにオススメの連載
できるIBM i 温故知新編
7記事
できるIBM i 温故知新編
IBM i の”新”必須言語 〜FFRPG入門〜
14記事
IBM i の”新”必須言語 〜FFRPG入門〜
IBM i アプリの第二の柱 OSS
15記事
IBM i アプリの第二の柱 OSS
PAGE TOP