Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

Web ブラウザ上で動く Prolog の対話環境 (REPL) サイトを立ち上げた

ズバリ、表題のとおり、近代 Web ブラウザ上で動く Prolog の対話環境 (REPL) サイト "Prolog on Browser" を立ち上げました。
URL は下記です。

現時点では、まだちゃんとオフライン対応の仕込みをしていないため、インターネット接続がないと利用できませんが、サーバー側で Prolog が動いているのではなく、Web ブラウザ上で Prolog インタープリタが動作しています。

PWA 等でオフライン対応の実装を済ませたら、いちどロードした後はインターネット接続がない環境でも起動できるようになります。

動作の仕組み

C# 製の Prolog インタプリター "CSharpProlog"

John C Pool 氏が 2006 年に個人的なプロジェクトとして、C# を使って Prolog インタプリターを開発しました。
それが「CSharpProlog」(a.k.a CSProlog) というライブラリです。
NuGet パッケージとして下記に公開されています。

この NuGet パッケージを利用することで、C# プログラムに Prolog インタプリター機能を搭載したり、Prolog によるルールエンジンを実装したりすることができます。

5年前の記事ですが下記に参考記事があります。

"Prolog on Browser" では、この「CSharpProlog」を Web ブラウザ上で動作させることで、Prolog の対話環境 (REPL) を実現しています。

Web ブラウザ上で C# による SPA 実装を実現する "Blazor"

Steve Sanderson 氏が 2017 年に個人的なプロジェクトとして、.NET の IL (中間言語) のインタプリター実装 (Chris Bacon 氏による) を拾い上げ、これを Web ブラウザ内の WebAssembly 上で走らせることで、C# で SPA を書くことを実現しました。
それが Blazor WebAssembly というフレームワーク/SPA 実行環境です。

まだ正式プロダクトになる前の当時の投稿ですが、下記など参考になればと思います。

今は Microsoft の ASP.NET Core チームに正式に引き継がれ、2020年5月に正式バージョンとしてのリリースを果たしました。

"Prolog on Browser" では、Blazor WebAssembly を使って SPA として実装しています。
Blazor WebAssembly は、C# プログラム、というか、正確には .NET のアセンブリ( .dll) を Web ブラウザ上で動かせるわけなので、それで、前述の「CSharpProlog」も Blazor WebAssembly により Web ブラウザ上で実行されている次第です。

他の実装手段はなかったのか?

そもそも Prolog インタプリターの WebAssembly 実装が利用可能であれば、現状の "Blazor on Browser" サイトのような何段ものレイヤーを積み重ねたようなまどろっこしい実装は不要です。

ただ、自分の知れる範疇では、Prolog インタプリターの WebAssembly 実装についてはよくわからず仕舞いでいます。
しかしとりあえず「CSharpProlog」の取り扱いと、Blazor WebAssembly による SPA 開発については、自分にも一定の知識と経験がありましたので、それで手っ取り早く自分の実現できる手段で "Blazor on Browser" サイトを立ち上げてみた次第です。

どうして "Prolog on Browser" サイトを立ち上げたのか?

Qiita Prolog アドベントカレンダー 2020に空きがあったので、何か投稿するネタとかないかなー、と考えて、それでふと、今回紹介の "Prolog on Browser" サイトの立ち上げを思いつきました。

それがいちばんの動機です :)

なお、今日現在公開中の "Prolog on Browser" サイト立ち上げまでには、余暇の時間を使って2日間かかりました。
今日に至るまでの Blazor WebAssembly の実装経験や、他のオープンソースコードの蓄積がありそこからの転用ができたので、その程度の実装期間で済んだ感じです。

"Prolog on Browser" の今後

さて、こうしてどうにか "Prolog on Browser" サイトを公開開始はしたのですが、実のところ、未実装の機能や要件がたくさんあります。

本当は、「気軽な Prolog プログラミングの学習用にいかがですか?」と言いたいところです。
が、今日現在の "Prolog on Browser" の程度ではちょっと無理がありそうです。

だいたい、ブラウザを閉じたらそれまでに REPL に入力した Prolog プログラムは揮発してなくなります。

そもそも consult() (テキストファイルに記述された Prolog プログラムファイルを読み込むこと) すらできません。
機能がないというよりも、もともとは Web ブラウザ上での動作を想定していなかった Prolog インタプリター実装を動作させているので、consult() をはじめとした、入出力を伴う述語は、例外を発生させてクラッシュすることでしょう。

Prolog の学習用であれば、もう随分と昔から、そして今でも、ideone.com などのような、インターネット上で Web ブラウザ経由で利用可能なオンライン環境が既にあります。

ということで、今日現在の "Prolog on Browser" は、技術実証としては面白いとは思いますが、実用は難しいことでしょう。

いっぽうで、"Prolog on Browser" を立ち上げた私本人ですが、他にもあれやこれやと手を広げすぎていて、この "Prolog on Browser" サイトのテコ入れに十分な時間を確保できませんw 😅

ということで、もしも物好きな方がいらっしゃれば、この "Prolog on Browser" をぜひ fork していただき、ご自身でサイトを立て、「Web ブラウザ上で動く Prolog の対話環境 (REPL) サイト」を実用的なレベルにまでご自身で育ててみるのはいかがでしょうか。

"Prolog on Browser" のソースコード一式は基本的に C# (と HTML, CSS, 少々の JavaScript など) から出来ていて、下記 GitHub リポジトリにて、MIT License で公開しています。

.NET SDK さえインストールされていれば OS 問わず、以下のコマンド実行で上記 Git リポジトリを clone して手元のローカル環境で実行できます。

$ git clone https://github.com/jsakamoto/Prolog-on-Browser.git
...
$ cd Prolog-on-Browser/PrologOnBrowser 
$ dotnet watch run

テキストエディタに Visual Studio Code を使えば、Ctrl+Shift+B でビルド、F5 で実行されるように構成済みです。

ということで、"Prolog on Browser" の未来は、物好き高潔なる有志の方に託したいと思います! 😁

余談

実は自分、Prolog プログラミングは、ほとんどできません 😱
Prolog でサクサクとプログラム書けるようになったらかっこいいのでは? と思っているのですが、挫折してばかりです。

Learn, Practice, Share!

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away