Markdownでrails generateみたいなのを作れるツールを作った

開発中にアーキテクチャに乗った開発していくにつれて、テストだったり実装だったりをいつも同じような記述やディレクトリ構造に配置すること、多々あるとおもいます。 そういった時に他のファイルをコピペして開発するのだと、実装を消したりコピペ元特有の名前を置換する作業が発生して面倒です。 とくにコピペミスやディレクトリの作成ミスなどで他の部分と若干命名がずれる、みたいなのが発生すると開発体験が最悪です。 Ruby on Railsではこのような問題を rails generate でソースコードの雛形を複数ファイルをまとめて作ることによって解決しています。 この解決方法は結構開発体験がよいので、今回はどのプロジェクトでも違和感なしに rails generate を実現できるようなツール mdmg を作成しました! インストール方法 AURやhomebrew用のあれこれをやるのが面倒だったので、もう適当です。 cargoコマンドが使える人は cargo install mdmg でインストールできます。 cargoがない人は https://github.com/himanoa/mdmg/releases/tag/v0.1.1 からお好きなプラットフォーム向けのassetsをダウンロードして、中のmdmgをパスが通ってるところに配置してください。 シンプルな使い方 プロジェクトディレクトリで mdmg setup を実行すると .mdmgディレクトリが生成されます。 mdmgコマンドは .mdmgディレクトリ内のMarkdownを基にscaffolding計画を決めるツールなので、次のようなmdmgテンプレートを .mdmg/source.md に配置しましょう https://gist.github.com/himanoa/9b716e16fa421c523150b00114a186ed 作成したプランを基に実行するのは次のコマンドでできます! mdmg generate source fetchGitHubToken プランのテンプレート内の {{identify}} がfetchGitHubTokenに置換されて、h2見出しのディレクトリとファイル名にcodeblockが出力されて保存されます また mdmg generate は -d オプションでdry-runすることができるので、テンプレートを書いてる時に有効活用すると良いでしょう 特徴 ほぼREADME.mdに書いてあることの詳細解説です Markdownでscaffoldの計画書を記述できる rails generate では generatorを自作するためにはRubyスクリプトを書きますが、mdmgはhandlebars templateが使えるmarkdownを採用しました。 Rubyスクリプトとmarkdownでの計画書記述の優劣は次の通りです - (優) markdownはcodeblockを使えるのでGitHub上でsyntax highlightが効く - (劣) スクリプトではないので環境変数などによってファイルを作ったり作らなかったりみたいな分岐を表現できない このmarkdownでscaffoldの計画書を記述することができる、というアイデアは https://github.com/cats-oss/scaffdog で採用されていて、とても良かったので概ねパクってきました。

Posted

やめたい人生2021

部屋の片付けができない ゴミを指定の日に出せない 床に物を置きがち 労働のパフォーマンスが不安定 総括 人生ごとやめたほうが良い

Posted

ゆっくりと破滅に向かう

もしかして: 終焉のカウントダウン ?

Posted

連休の始まり

遅めの5連休を取ったので今日から連休スタートです。せめて連休中は毎日日記を書いていきたいところ 今日やったこと 労働 職場の人にいい感じの小さいRustツールを教えてもらったのでパッチ書いた ゴミ捨て オクトパストラベラー プリムロゼの二章だけ 今日やりたいこと 生活の修復 部屋の掃除 ゴミ捨て 風呂掃除 プログラミング 旅団世界の戦闘シミュレータ なんか良さげなOSSみつけてパッチ投げたい その他 せっかく5連休を手に入れたのはいいですが、日程だけとりあえず抑えた感じで何も予定がないし、コロナが最強に流行ってるので旅行とかもいけないしでやること不足気味ですね。 k8sのクラスタでもVPS上に建築するって言って全く手つけてなかったのえやれるといいなーっていま思ってます あと、風呂からブログかけたら便利だろうなとおもって、iPadからブログを書けるようにしてるんですが、意外とiPadって文字書きやすいですね。仕事で使ってるラップトップよりタイピング体験がいい気さえしています。

Posted

TypeScript備忘録(関数の実行時に推論を確定させるテク)

type UseSelectorBuilder<T, S> = () => (selector: (state: T) => S) => S みたいな型が存在した時にSelectorBuilderではTまでの型を確定してSはbuilderの戻り値を呼び出した時に型を確定させたい場合どう書けばいいか 答えはこう type UseSelectorBuilder<T, S> = () => <S>(selectlor: (state: T) => S) => S よかったですね

Posted