2019の22日目の記事です。スポンサーリンクプログラミング翻訳サービス、ProgLearnみなさん、こんにちは。アドベントカレンダーです。私はTokyoのLAB6期生として半年間お世話になりました。Auditionという機会があるのですが、その時に、私、面白いサービス(自分で言った!)を発表しました。それは、プログラミングの翻訳サービスです。...どういうこと?はい、その疑問ごもっともです。画面の左側にJavaScriptを入力してEnterキーを押すと...\ッターン/さあ、右側にご注目です。翻訳されてるーーー!こんなサービスを粛々と作っています。このサービスを説明するとギークな方々から「どうやって作ってるの?」という質問が飛んできます。この翻訳ロジックを作る部分、実は結構苦労したんです。No.1一番最初は自分でなんちゃってMVCフレームワークを作ってアプリを構築しました。翻訳についてはGrammerModel内に定義しています。改行でsplit、;で一区切りとみなし、多重配列を作成する多重配列の先頭を予約語とみなし、ルールを定義するというものでした。';']という形に分解してから、先頭の予約語(let)に基づいて翻訳を実行する、というものでした。ちなみに、関数名が和訳されているのは、関数名を単語ごとに分解してGoogle翻訳にぶん投げています。プロトタイプNo.2さて、上記のようにゴリ押しで実装を進めていた私ですが、実装ロジックを改めて作り直すことにしました。その理由は、上記のロジックでは立ち行かないケースが多数出てきてしまったためです。...]このように、for文がバラバラになってしまいます。一つの配列で扱うという例外設定を追加しなければなりません。同様の事象はif文でも関数でも同様に発生してしまいます。例外設定が多く生まれてしまうということは、ルールとして機能していないということに他なりません。悪いことに、splitの条件が”半角スペースがあること”としています。i=0のような書き方をされてしまった場合、['i=0']と数式の状態のまま配列化されてしまいます。そこで、JavaScriptを意味ごとの塊で分類出来ることを条件に、新たなルール探しを模索していました。そんな私の前に現れたのが、Babelライブラリです。Calendarでも書かせてもらいました。Toolingという形でBabelにまつわる機能を提供しています。その中にある、parseという機能がまさに私が追い求めていた機能を提供していました。console.log('武田信玄「ありがとう」')}これを、Babelではこのように分解してくれます。}この情報を基に、ルール付けを実施しました。}プログラム自体の可読性も上がっています。作ってみる一見良さそうに見えるNo.2の方針ですが、これもまだ不完全であると考えています。それは、結局ルールの個別設定になってしまっている点です。この部分のルール化・改良化に取り組もうと思っています。ロジックを考えながら実感したのは、まずは動いてみることの重要性。一度作ってみると、新しい発見や気づきを得ることができました。今回の場合も1つ目のプロトタイプを作っていなかったら、翻訳ルールの穴に気づくことができなかったと思います。MEどんぶラッコECコンサルタント、システムエンジニア経験を経て、ProgLearnのシステム開発を担当。コメントをキャンセルメールアドレスが公開されることはありません。付いている欄は必須項目です次回のコメントで使用するためブラウザーに自分の名前、メールアドレス、サイトを保存する。【そもそもIFRSって何】日本の会計基準とIFRSので減損の仕方が違う!?【イファースと読みます。6プログラミング学習補助ツール開発ProgLearn本サイトについてプログラミング教育や、プログラミングの知識を中心に、"今日から使える"情報を配信しています。ProgLeanについて「プログラミング学習の情熱を絶やすことなくサポートする」ことを理念とし、プログラミング学習導入Webサービス「ProgLearn」を開発。正式ローンチに向けて鋭意準備中です。プログラミング総合情報サイトプログラーン。