LoginSignup
19
6

闘魂mkdir ── mkdirしたらcdしてついでにVisual Studio Codeを立ち上げることにしました

Last updated at Posted at 2023-08-14

$\huge{元氣ですかーーーーッ!!!}$
$\huge{元氣があればなんでもできる!}$

$\huge{闘魂とは己に打ち克つこと。}$
$\huge{そして闘いを通じて己の魂を磨いていく}$
$\huge{ことだと思います}$

はじめに

本記事の内容は、macOS Ventura 13.5でのみ試しています。

mkdirするときって、私はだいたい決まって以下の手順を行います。

mkdir awesome
cd awesome
code .

これを一気に行うコマンドを作ってみます。

ちなみに25年くらい前の私が最初にコマンドって素晴らしいですねと感動したコマンドがmkdirでした。
これを知らなくて、ホームディレクトリ配下に大量の.cファイルやら~ではじまるファイルやら、実験データなどが散乱していたことを覚えています。

mkdirで作成したディレクトリに作成と同時に移動する」こちらの記事をとても参考にしました。ありがとうございます!

シェルスクリプトで実現する

シェルスクリプトで実現してみます。

ファイル名や配置場所などもっとよいやり方がありましたらぜひ教えてください

~/mkcdcode
mkdir -p $1 && cd $1 && code .

~/mkcdcodeというファイルを作りました。中身は上記の通りです。
shebangを書いていません。

chmod +x ~/mkcdcode

~/.zprofileファイルに以下を書き足しました。

~/.zprofile
alias mkcdcode='source $HOME/mkcdcode'

あとは、source ~/.zprofileとやるかターミナルを立ち上げ直してください。
使い方はたとえばawesomeというすごいディレクトリを作る際には以下のように実行します。

mkcdcode awesome

これを実行すると、awesomeというすごいディレクトリが作成されて、awesomeディレクトリへChange Directoryして、Visual Studio Codeで開かれます。

escriptで実現する

Elixirという素敵な言語がありましてですね、簡単にCLIアプリケーションを作れます。
Executables」が詳しいです。

私が作ったものをGitHubにあげています。

Elixirはインストール済みでmixコマンドが使用できる環境をお持ちであることを前提に筆を進めています。

ただね、cdがうまくいっとらんとです。
解決策がわかる方はぜひ教えてください。

@zacky1972 先生のコメントで解決できました。
ありがとうございます!


以下、「cdがうまくいきませんでした」の内容(思い出)をそのまま残しておきます。

スクリーンショット 2023-08-14 14.17.16.png

参考にさせていただいた記事「mkdirで作成したディレクトリに作成と同時に移動する」のこのへんの事情と同じだとおもいます。
Elixirのプログラム実行中には確かに移動できていますが、プログラムが終わったあとの実行元のOSのプロセスには影響を及ぼさないみたいな。

ちなみにsource mkdir_cd_code hoge. mkdir_cd_code hogeでは以下のエラーでうまくいきませんでした。

source mkdir_cd_code hoge
/Users/osamu/.asdf/installs/elixir/1.15.4-otp-26/.mix/escripts/mkdir_cd_code:fg:2: no current job
/Users/osamu/.asdf/installs/elixir/1.15.4-otp-26/.mix/escripts/mkdir_cd_code:fg:3: no current job
/Users/osamu/.asdf/installs/elixir/1.15.4-otp-26/.mix/escripts/mkdir_cd_code:4: bad pattern: PK^C^D^T^@^@^@^H^@^Wp^NW؎I\M-(\M-^U^E^@^@^P^H^@^@^Z^@^@^@mkdir_cd_code_escript.beammU[l^TU^X\M-^^ٳ\M-]^]\M-6\M-^]r\M-:3\M-]m\M-9u\M-h\M-v\M-Bm/-^P\M-(^H\M-^Y^V\M-^W\M-%\M-4\M-T\M-J%\M-\n^ON\M-'

それで私は何をやったかというと、ターミナルアプリを新しく起動するという方法を採りました。 @zacky1972 先生にいただいたコメントを参考にcd $(mkdir_cd_code hoge)とすることにしました。

以下ざっと本件を例にescriptの作り方を書いておきます。

escriptについては、

の記事も詳しいです。

プロジェクトの作成

プロジェクトを作成します。
cdcodeも行います。

mix new mkdir_cd_code
cd mkdir_cd_code
code .

ソースコードの作成

ソースコードを作成します。
2つのファイルです。

mix.exs

mix.exsescript: [main_module: MkdirCdCode.CLI]を書き足します。

mix.exs
defmodule MkdirCdCode.MixProject do
  use Mix.Project

  def project do
    [
      app: :mkdir_cd_code,
      version: "0.1.0",
      elixir: "~> 1.15",
      start_permanent: Mix.env() == :prod,
      deps: deps(),
      escript: [main_module: MkdirCdCode.CLI] # add
    ]
  end

lib/mkdir_cd_code/cli.ex

lib/mkdir_cd_code/cli.exを実装します。

lib/mkdir_cd_code/cli.ex
defmodule MkdirCdCode.CLI do
  def main([]) do
    # ディレクトリ名が指定されなかった場合は使い方を説明して終了
    # https://qiita.com/torifukukaiou/items/c4c27c9453065f83f0a7#comment-9ddd3d0ccf767d6e74a7
    IO.puts(:stderr, "Usage: mkdir_cd_code dir_name")
    IO.puts(".")
  end

  def main(args) do
    [dir | _] = args
    :ok = File.mkdir_p(dir)

    if System.find_executable("code") do
      System.cmd("code", [dir])
    end

    IO.puts(dir) # 移動先のディレクトリのみを標準出力に表示する
  end
end

インストール

プロジェクトのルートで下記のコマンドを実行します。

mix escript.install

または私の制作したものを使用してくださるのなら以下のコマンドでもインストールできます。

mix escript.install github TORIFUKUKaiou/mkdir_cd_code

もう一度繰り返しておきます。

本記事の内容は、macOS Ventura 13.5でのみ試しています。

open -a Terminal awesomeなんてmacOS以外動きません。

ちなみにmix escript.installの使い方は、mix help escript.installを引いてみてください。

そのあとは、インストール場所が示されるのでパスを控えておいてください。
パスがわからなくなったらmix escriptコマンドで調べることができます。

私は~/.zshrcに以下のような関数を追加しました。

~/.zshrc
mkcdcode() {
    cd $($HOME/.asdf/installs/elixir/1.15.4-otp-26/.mix/escripts/mkdir_cd_code $1)
}

Elixirの新しいバージョンをインストールしたらどうしよう。
都度これを書き直すことになるのでしょうが、忘れそうです。
忘れないようにするためにQiitaに書いたとも言えます。
もっといい指定の仕方をご存知の方はぜひ教えてください!

使い方

使い方を示します。

mkcdcode hoge

hogeというディレクトリができて、Visual Studio Codeが立ち上がって、ターミナルはhogeディレクトリへ移動します。


さいごに

mkdirしたらcdしてついでにVisual Studio Codeを立ち上げることにしました。
シェルスクリプト版は、シェルスクリプトの配置場所、ファイル名、aliasを書く場所など「こうしたほうがいい」があるかもしれませんが(ぜひコメントください:pray:)、当初やりたかったことを実現できました。

私はElixirが好きですし、簡単にコマンドラインツールが作れるので、Elixirでやったらおもしろそう! と取り組んでみたところcdがうまくいきませんでした。
こちらはわかるかたはぜひ教えてください! => @zacky1972 先生のコメントにより解決できました! ありがとうーーーーッ!!! ございますです。

「教えてください」が多目の記事となりました。こんな話を思い出しましたので最後にツイートを貼っておきます。


闘魂とは、 「己に打ち克つこと。そして闘いを通じて己の魂を磨いていくことである」 との猪木さんの言葉をそのまま胸に刻み込んでいます。
知っているだけで終わらせることなく、実行する、断行する、一歩を踏み出すことを自らの行動で示していきたいとおもいます。
アントニオ猪木さんのメッセージから元氣をもらったものとして、それを次代に語り継ぎ、自分自身が「闘魂」を体現するものでありたいとおもいます。


$\huge{元氣ですかーーーーッ!!!}$
$\huge{元氣があればなんでもできる!}$
$\huge{1、2、3 ぁっダァー!}$

19
6
5

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
19
6