免責事項フリーランスエンジニア→法人化した人の技術ブログ。フリーランス事情や会社の作り方、経営などについても徒然なるままに書いていきます。主な使用言語はRuby、JavaScript。2019年4月24日Tweet「メタプログラミングRuby」第四章後半にて、Rubyで記述するDSLに関する説明がされています。今回は、Rubyで書くDSLの書き方の基本事項に関してまとめていきます。language、DSL)とは、特定のタスク向けに設計されたコンピュータ言語である。ドメイン特化言語あるいは単にドメイン言語とも呼ばれるが、学術的にはドメイン特化言語と呼ばれることが多い。C言語やJavaのような汎用のプログラミング言語の対照とされる。(Wikipedia)個人的には、小難しい実装を内部に隠蔽し、「ソースコードをまるで文章のように」読むことができることが、DSLを実装する最大のメリットと考えています。DSLの仕組みを用いて記述されるビルドツールです。以下のRakefileを見てみましょう。End.'endあたかも人間がやることリストを書き下すように、Rubyの振る舞いを定義しています。hello_taskItamaeItamaeはRubyで記述された、ChefやAnsibleより軽めのサーバープロビジョニングツールです。recipe.rbに記述されたDSLを元に、サーバーをセットアップすることができます。:installend「上から下へ、まるで英語の文章を読むように」設定を記述することができていますね。Itamaeの仕組み・実装を知らなくても、このrecipe.rbを見るだけで、「あ、nginxのパッケージをインストールしているっぽい」という予測をすることができます。以下のコードを見てみましょう。シンプルな、入門書の第一章に出てくるようなコードです。渡して呼び出しています。このコードを、以下のように書き換えてみます。Kernel#requireとは違い、読み込んだコードを実際に実行する関数です。'Hello,DSL!'hello_dsl.rbだけみると、「DSLっぽく」なってきました。Hello,DSL!ブロックを渡すブロックを渡すにも、「DSLだから」特別な書き方をしているのではなく、実はシンプルなyieldで実装できます。difficult'end「難しそう」なイメージを捨てて読んでみると、実は上の行で定義されたメソッドに対して適切な引数を呼び出しているだけ、ということがわかります。実例:簡単なTodoListを作るDSLの例として簡単なDSLを実際に作ってみます。Todoリストを記述できるDSLを実行すると、TODOリストの中で未完了なものが表示されるというシンプルなものを作ってみましょう。DSLのコア部分は以下のようになります。'todolist.rb'DSLとして記述すべきファイルは以下のように書きます。'2017-11-30'end紙で管理するTODOリストにだいぶ近い感じで記述できているのではないでしょうか。これなら書式を簡単に共有してあげるだけで、プログラマーでない人でもこのファイルを書くことができそうです。#=>「部屋の掃除」が未完了ですできましたね。プログラミング入門SIer時代にお世話になった本です。プログラミングgulp-angular構成でIE11でハマった。...プログラミングgitの学習コストを下げ、事故を減らす2つのポイント今やシステム開発において必須ツールの一つとなった感のあるgitですが、未だに初心者への敷居が高いという問題点があります。windowsからMacに移行するにあたり、いろいろショートカットキーの位置が変わっていたりするので個人的にまとめてみます。...PREV[遊んでみた]RubyでJavaを書くNEXT27歳フリーランスエンジニアが1200万稼いでみて、得たものと失ったものyohira_dev正社員になるも80時間以上のサービス残業により過労退職→フリーランスエンジニア→月商100万突破、2017年法人成り。RailsとVue.jsを用いた高速実装・改善が強み。BeanはSingletonだから、状態持たせるとバグるよ。SESで簡単なログイン認証を実装する【法人化3年目の体験談】今年の売上は1300万程度で着地しそうです。SESで簡単なログイン認証を実装するオピニオン2020/1/27【法人化3年目の体験談】今年の売上は1300万程度で着地しそうです。免責事項フリーランスエンジニア→法人化した人の技術ブログ。フリーランス事情や会社の作り方、経営などについても徒然なるままに書いていきます。主な使用言語はRuby、JavaScript。AFFINGER5.。