Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

Thor を使って簡単に「テンプレート」機能を実装する

More than 3 years have passed since last update.

これはなに?

複数プロジェクトが共通して利用するリポジトリがあるとします。
新規プロジェクトが参加するたびに、だれかが手動でプロジェクトディレクトリを作成して雛形から簡単なファイルを generate する作業が発生する場合があります。

ここでは、そういった作業を Thor を利用してコマンド一つですぐに「新規プロジェクト」の雛形を作成できる機能を実装してみたいと思います。(もちろんプロジェクトではなく、「新しい概念の参加」であれば基本なんにでも使えると思います。)

(想定、オーケストラレーションツールなど)

Gemfile に thor を追加

gem 'thor' を追加し、 bundle install してください。

Thorfile を作成

例を gist にしました。
- https://gist.github.com/kozyty/51d292d7e577bd055290e46c2be17301

app.tt
<%= name %>
<%= config[:username] %>
<%= config[:domain] %>
require 'thor'

class Generator < Thor::Group
  include Thor::Actions

  argument :name

  class_option :username, aliases: '-u', required: true
  class_option :domain, aliases: '-d'

  def self.source_root
    File.dirname(__FILE__)
  end

  def create_lib_file
    say "project_name: #{name}", :green
    say "username: #{options[:username]}", :green

    if options[:domain]
      say "domain: #{options[:domain]}", :green
    else
      say "Please set up domain later.", :red
    end

    config = {
      username: options[:username],
      domain: options[:domain]
    }

    template('templates/projects/app.tt', "projects/#{name}/app.rb.sample", config)
  end
end

実行方法

$ bundle exec thor generator [name] [-u username] [-d domain]

無事、雛形の .sample ファイルが生成されれば完了です。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away