package-buildを使ってEmacsのパッケージを作る

公開日:2019-05-22
最終更新:2019-05-23

Emacsのパッケージとarchive-contentsをpackage-buildを使って作成しました。また作成時のファイルの配置場所などの設定を確認しました。

おしながき

  1. 何をしたいのか
  2. パッケージ化するソースコード
  3. 関連ファイルの出力先の設定
  4. レシピを作成する
  5. パッケージを作る
  6. まとめ

何をしたいのか

Emacsのパッケージがインストールされるのを眺めるM-x package-refresh-contents した時にどのようなファイルを取得しているのかを確認しました。その中でインデックス情報であるarchive-contentsや署名である.sigなどのファイルをダウンロードしていました。このarchive-contentsはではどのようにして作成すればよいのでしょうか。今回はmelpaが管理しているpackage-buildというパッケージを使って自分のパッケージを作成し、合わせてarchive-contentsも作成します。

パッケージ化するソースコード

今回はパッケージ化することが目的なので特に何も機能を持たないソースコードを準備しました。https://github.com/sximada/testing にはtesting.elとREADME.orgいうファイルが用意されています。testing.elには設定に最小限必要な(パッケージを作る過程でエラーにならないようにするもの)ものだけを記述しました。README.orgはパッケージ化に必要なものではありませんが便宜上配置しました。

testing.el

;;; testing.el --- Testing  -*- lexical-binding:t -*-  
;; Version: 201905.01  

(provide 'testing)  

;;; testing.el ends here  

なおもっと詳しいパッケージの作り方についてはhttps://www.emacswiki.org/emacs/MakingPackagesを読むと良いと思います。

関連ファイルの出力先の設定

今回はpackage-buildを使ってパッケージ化を行いますが、その際に関連するファイルの配置場所を変数で指定できます。

変数 備考 変数の値がnilの場合の対象となるディレクトリ
package-build-working-dir パッケージ化するリポジトリをcloneするところ ~/.emacs.d/elpa/working
package-build-archive-dir パッケージをおくところ ~/.emacs.d/elpa/packages
package-build-recipes-dir レシピを置くところ ~/.emacs.d/elpa/recipes

※ package-buildmelpa-baseは~/.emacs.d/meplaと仮定。

参考までにpackage-buildmelpa-baseの定義はこれです。

(defconst package-build--melpa-base  
  (file-name-directory  
   (directory-file-name  
    (file-name-directory (or load-file-name (buffer-file-name))))))  

(defgroup package-build nil  

デフォルトの設定ではレシピの配置場所やソースのダウンロード場所が上記の位置になります。今回はそれらのディレクトリを便宜上変更したいので次ように設定しました。

(setq package-build-working-dir "/srv/sximada")  
(setq package-build-recipes-dir "/srv/sximada/cubelpa/recipe")  
(setq package-build-archive-dir "/srv/sximada/cubelpa-repo/packages")  

レシピを作成する

M-x package-build-create-recipe を実行するとミニバッファが開き Package name: が表示されます。ここには作成するパッケージ名を入力します。すると入力した名前でレシピのバッファが作成されます。レシピに適切な値を設定し C-c C-c するとpackage-build-archive-dirにレシピが保存され、パッケージのソースコードがpackage-build-working-dirに取得されます。

取得が終わるとインストールするかどうかを聞いてきます。 y を入力するとインストールされます。

パッケージを作る

ここまで実施するとパッケージ対象のソースコードが取得されていて、新しいレシピtestingが作られています。 M-x package-build-archive を実行するとミニバッファにパッケージを選択する内容が表示されます。パッケージを選択するとpackage-build-recipes-dirにパッケージ関連のファイルが作成されます。

ファイル名 内容
archive-contents パッケージのインデックス
testing-20190521.1402.el パッケージの実体
testing-20190521.1402.entry パッケージのインデックスの1行になる値

M-x package-build-all を実行するとpackage-build-archive-dir配下にある.entryファイルを収集してarchive-contentsが更新されます。

まとめ

今回はbuild-packageを使ってパッケージを実際に作りながら以下を確認しました。

  • 次のコマンドを使ってレシピ/パッケージの作成ができる
    • package-build-create-recipetk
    • package-build-archive
    • package-build-all
  • 作成されるのは以下
    • archive-contents (インデックス情報)
    • パッケージの実体
    • archive-contentsの元になる.entryファイル
  • 次の設定で関連するファイルの出力先を変更できる
    • package-build-working-dir
    • package-build-archive-dir
    • package-build-recipes-dir
記事が少しでもいいなと思ったらクラップを送ってみよう!
0
+1
そして粛々と生きる

よく一緒に読まれている記事

0件のコメント

ブログ開設 or ログイン してコメントを送ってみよう
目次をみる

技術ブログをはじめよう

Qrunch(クランチ)は、ITエンジニアリングに携わる全ての人のための技術ブログプラットフォームです。

技術ブログを開設する

Qrunchでアウトプットをはじめよう

Qrunch(クランチ)は、ITエンジニアリングに携わる全ての人のための技術ブログプラットフォームです。

Markdownで書ける

ログ機能でアウトプットを加速

デザインのカスタマイズが可能

技術ブログ開設

ここから先はアカウント(ブログ)開設が必要です

英数字4文字以上
.qrunch.io
英数字6文字以上
ログインする