メインコンテンツへスキップ

Prettier for Ruby v1.0 リリース 🎉

· 1分で読める
非公式ベータ版翻訳

このページは PageTurner AI で翻訳されました(ベータ版)。プロジェクト公式の承認はありません。 エラーを見つけましたか? 問題を報告 →

2018年7月以降の1500コミットと50リリースを経て、Prettier for Rubyのv1.0を正式リリースできたことをお知らせします。本記事では、このプラグインの動作原理、設計思想、今後の展望について概説します。

動作原理

Prettier for RubyはPrettierのプラグインAPIを通じて動作します。parse関数はRubyプロセスを生成し、Ruby組み込みのパーサー(Ripper)を利用します。様々なノードタイプ、コメント、位置情報、その他のメタデータを収集した後、構築した抽象構文木(AST)をPrettierプロセスに返します。最終的にそのASTをPrettierの中間表現(Doc)に変換し、Prettierがフォーマット結果を出力します。

設計思想

本プラグインは多様なコードスタイルを可能な限り許容します。例えばメソッド呼び出しの括弧の有無については、ユーザーの選択を尊重します。ただしRubyコミュニティで確立された強い意見が存在するケースでは、オプションを提供しています:

  • rubyArrayLiteral - デフォルトでは、単純な文字列やシンボルの配列を配列リテラル構文(それぞれ%w%i)に変換します。このオプションを無効にすると変換を行いません。

  • rubyHashLabel - ハッシュロケット記法を好む方向けのオプションです。デフォルトではハッシュキーを一貫して出力します(ラベル記法が可能な場合は全キーで採用、不可能な場合は全キーでハッシュロケットを使用)。デフォルト動作を無効にすると、全てのハッシュキーで常にハッシュロケットを使用します。

  • rubyModifier - ifunlesswhileuntilの修飾子形式を好まない方向けのオプションです。

  • rubySingleQuote - デフォルトでは適切な場合にシングルクォートを使用し、それ以外ではダブルクォートを使用します。このオプションで逆の挙動に変更できます。

  • rubyToProc - array.map { |elem| elem.to_s }のような記述をarray.map(&:to_s)に変換する機能です。ブロックのアリティが技術的に変化し、リフレクションコードが壊れる可能性があるため、デフォルトでは無効です。

さらに以下のPrettierコアオプションもサポートしています:

  • printWidth - デフォルトは80文字ですが、好みに応じて長く設定可能です。

  • tabWidth - デフォルトは2文字です。

  • trailingComma - デフォルトは"none"ですが、"all"を選択すると複数行にわたる配列リテラル、ハッシュリテラル、引数リストに末尾カンマが追加されます。

Prettierのスタイルは一般的にRubyスタイルガイド、すなわちデフォルトのRubocop設定に準拠します。ただしPrettier使用時には、RubocopのFormatting/*ルールを無効化することでリンターの実行速度向上が期待できます。

今後の展開

今後の開発計画は以下の通りです:

本日から、READMEの説明に従ってコマンドラインからこのプラグインを試すことができます。見つけたバグは必ず報告してください。発生次第迅速に修正できるよう努めています。また、興味があればプロジェクトへの貢献を始めてみてください