7
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

好きな言語にプログラムを翻訳してくれるサービスRonriBoxをリリースしました

Last updated at Posted at 2019-07-21

プログラムを好きなプログラミング言語に翻訳してくれるサービスRonriBoxをリリースしました。
解説動画
(※解説動画の最後では約7分で2019年までのうるう年を表示するプログラムを作り、JavaScript Python3.x Kotlin Go Java C C++ PHP Swift C# Rubyの11言語に翻訳します)

概要と、どのような原理で動いているのかを簡単に解説いたします。

概要

プログラムの構文は言語によって異なります。

/*C*/
#include <stdio.h>

int main(int argc, char* args[])
{
   puts("Hello World!");
   return 0;
}

//C#
class HelloWorld {
  static void Main(string[] args) {    
    System.Console.WriteLine("Hello World!");
  }
}

//Go
package main
import "fmt"

func main() {
 fmt.Println("Hello World!")
}

しかしうまくモデルを抽出することで論理構造は共通化できます。

スライド1.PNG

抽出した論理構造を"モデル"という単位でRonriBoxに保存します。

スライド2.PNG

最後に好きな言語を設定して使いたいモデルを呼び出します。すると目的の言語でプログラムのソースコードが出力されます。

スライド3.PNG

これがRonriBoxの主な機能です。

原理

この機能を実現するためにRonriBoxには、プログラミング言語によって翻訳を変えるテンプレートエンジンが搭載されています。

言語による翻訳の切り替え

RonriBoxは選択された言語によって適応するテンプレートを変えます。

スライド4.PNG

この機能を使って翻訳を切り替えています。

テンプレートによるモデルの再利用

もう一つ大切な機能として、テンプレートの中で他のテンプレートを呼び出すことができます。

スライド5.PNG

これによってモデルは再利用可能な部品となります。
モデルはプログラミング言語間の構文の違いを吸収し、論理的になんらかの機能を抽象化したものになります。
これらを組み合わせて大きなプログラムを構成していきます。

説明をすごく端折っていますがRonriBoxの動作する原理は以上の組み合わせで成り立っています。
私が作ったサンプルのモデルがいくつかあります。

forのモデル
ifのモデル

これらはそれぞれfor文やif文を抽象化しています。
他にも私の作ったモデル(※これを必ず使う必要はありません)に興味がある方は以下のガイドをご一読ください。
チュートリアル (日本語)
言語ガイド (日本語)

技術的なこと

サービスはVue.js + Laravel + MySQL + Vuetifyで作られています。
技術的な検証に1か月ぐらいかかりましたが、サービス自体は3日で製作いたしました。

最後に大切なこと

現在プログラマーの職を探しています。
特に札幌市内でご興味のある方がいらっしゃいましたら、ご連絡ください。
よろしければ履歴書を送らさせていただきます。よろしくお願いいたします。

7
9
5

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?