25
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

この記事誰得? 私しか得しないニッチな技術で記事投稿!

[Brew] tapを用いてC言語で作った自作アプリをリリースしてみる

Last updated at Posted at 2023-06-15

はじめに

自作でCLIを用いたアプリを作成して、それをリリースしてみたいと思ったことはありませんか?
MacやUbuntuなどでCLIアプリをインストールするには、Homebrewを用いてインストールをする方が多いため、そこに公開をする手順をまとめようと思う

最終形態

> brew tap harutiro/myqrencode
> brew install myqrencode
> myqrencode

これで実際に動くようにセットアップをしてみる

手順

公開したいCのファイルを用意する

今回は簡単にhelloworldと表示する何も面白くないファイルをリリースしてみましょう。

helloBrew.c
#include <stdio.h>

int main() {
    printf("Hello, World!\n");
    return 0;
}
helloBrew.c の 出力結果
Hello, World!

本当に何も変哲もなくて面白くないですが、わかりやすい例なのでこのアプリをリリースしてみましょう。

Makefileを作る

では皆さんは、コンパイルをする時に通常は

コンソール
> gcc main.c

と行うと思いますが、[make]と打つだけでコンパイルをしてくれるようにしてFormulaの記載を簡単にするためにmakefaileを作成していきましょう。

Makefile
CC=gcc
CFLAGS=-O

helloBrew: helloBrew.c
	$(CC) $(CFLAGS) -o helloBrew helloBrew.c -lncurses

実際にこれを打ってもらったら、makeと打つだけで本当にコンパイルされるか確認してみましょう

コンソール
❯ make
gcc -O -o helloBrew helloBrew.c -lncurses

そうすると、helloBrewファイルが作成されたと思います。
では、実際に実行をして出力されるか確認してみましょう

コンソール
❯ ./helloBrew
Hello, World!

これで[make]だけでコンパイルができるようになりました。

GitHubの必要なリポジトリを理解する

それではここからはリリース作業に入っていきたいと思います。
リリースをするのにGithubにふたつのリポジトリを作成する必要があります。

  • 実際のプログラミングソースファイルを管理するリポジトリ

  • homebrewのリリース関係を管理するリポジトリ(Formulaファイルを用意する)

コチラのレポジトリは名前の指定があります。
homebrew-<レポジトリ名>のように、最初にhomebrew-を書く必要があるため気をつけましょう

ではその中でも、実際のプログラミングソースファイルを管理するリポジトリの設定を行なっていきましょう。

タグをつけてGitHubにPushする

とりあえず、hello.cとMakefileをリモート側の”実際のプログラミングソースファイルを管理するリポジトリ”にPushしておきましょう

その後に、実際にタグをつけてリリースとしてファイルをまとめてみましょう。

コンソール
> git tag 0.0.1
> git push origin 0.0.1
Total 0 (delta 0), reused 0 (delta 0), pack-reused 0
To https://github.com/harutiro/BrewTapHello.git
 * [new tag]         0.0.1 -> 0.0.1

Githubの中のリリースの場所を押しましょう

リリースしたいタグのバージョンと、リリースの名前を記載して、リリースと押しましょう

リリースをしたら、tar.gzの方のリンク先のアドレスをコピーしておきましょう

Formulaファイルを作る

それでは、Formulaファイルを作成して、”homebrewのリリース関係を管理するリポジトリ”を作成していきましょう。

新しいフォルダーを作成して移動します。

コンソール
>brew create https://github.com/harutiro/BrewTapHello/archive/refs/tags/0.0.1.tar.gz

そうすることによってFormulaファイルが自動で開かれると思います。

Formulaファイルは
/opt/homebrew/Library/Taps/homebrew/homebrew-core/Formula/brewtaphello.rb
に作成されますので、作成されたファイルを新しく作成したフォルダーに移動しておきましょう。

それでは、中身を書き換えていきましょう
デフォルトではこのようなファイルが作成されていると思います。

brewtaphello.rb
# Documentation: https://docs.brew.sh/Formula-Cookbook
#                https://rubydoc.brew.sh/Formula
# PLEASE REMOVE ALL GENERATED COMMENTS BEFORE SUBMITTING YOUR PULL REQUEST!
class Brewtaphello < Formula
  desc ""
  homepage ""
  url "https://github.com/harutiro/BrewTapHello/archive/refs/tags/0.0.1.tar.gz"
  sha256 "657452206064c869c17f9c3d8caad492b6a42a745aac98d2e8b0d0d82bc7d684"
  license ""

  # depends_on "cmake" => :build

  def install
    # ENV.deparallelize  # if your formula fails when building in parallel
    # Remove unrecognized options if warned by configure
    # https://rubydoc.brew.sh/Formula.html#std_configure_args-instance_method
    system "./configure", *std_configure_args, "--disable-silent-rules"
    # system "cmake", "-S", ".", "-B", "build", *std_cmake_args
  end

  test do
    # `test do` will create, run in and delete a temporary directory.
    #
    # This test will fail and we won't accept that! For Homebrew/homebrew-core
    # this will need to be a test that verifies the functionality of the
    # software. Run the test with `brew test BrewTapHello`. Options passed
    # to `brew install` such as `--HEAD` also need to be provided to `brew test`.
    #
    # The installed folder is not in the path, so use the entire path to any
    # executables being tested: `system "#{bin}/program", "do", "something"`.
    system "false"
  end
end

それを、下記のように変更してください
def installのところで、インストールをされた時の動作が行われます。
今回でしたら、system "make"でmakeファイルの実行がされてコンパイルがされます。
そうしてできたファイルをインストールしてどこでも使えるような形にします。

brewtaphello.rb
# Documentation: https://docs.brew.sh/Formula-Cookbook
#                https://rubydoc.brew.sh/Formula
# PLEASE REMOVE ALL GENERATED COMMENTS BEFORE SUBMITTING YOUR PULL REQUEST!
class Brewtaphello < Formula
  desc ""
  homepage ""
  url "https://github.com/harutiro/BrewTapHello/archive/refs/tags/0.0.1.tar.gz"
  sha256 "657452206064c869c17f9c3d8caad492b6a42a745aac98d2e8b0d0d82bc7d684"
  license ""

  # depends_on "cmake" => :build

  def install
    system "make"
    bin.install "helloBrew"
  end
end

後はコミットしてリモート側にPushを行いましょう
これでリリースの設定は終わりました。

インストールをしてみる(別PCで行う)

後はリリースされているファイルを実際にインストールをしてみましょう
なぜか、リリースをおこなったPCだとエラーを吐いてインストールができないため、別のPCを用いてインストールの確認を行なってみましょう

コマンドの説明

brew tap ユーザー名/レポジトリ名
brew install リポジトリ名
brew install cのファイル名

コンソール
> brew tap harutiro/BrewTapHello
> brew install BrewTapHello
> brewHello

実際のリポジトリ

参考文献

brewについて

makeファイルについて

25
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
25
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?