疑念は探究の動機であり、探究の唯一の目的は信念の確定である。

数学・論理学・哲学・語学のことを書きたいと思います。どんなことでも何かコメントいただけるとうれしいです。特に、勉学のことで間違いなどあったらご指摘いただけると幸いです。 よろしくお願いします。くりぃむのラジオを聴くこととパワポケ2と日向坂46が人生の唯一の楽しみです。

複数のv-selectを連動させる方法

概要
例えばあるカテゴリを選択すると、自動的にそのサブカテゴリが選択できるようにしたい。
Vuetifyのv-selectを2つ使ってその方法を示す。

  • 解説
  • 基本文法
    • 解決策
      • その1
      • その2
  • セレクトの戻り値を取得する方法
  • サブカテゴリについて
  • バグの修正について


App.vue

<template>
<v-app>
<v-select
  v-on:click="initializeSubcategories"
  v-model="categories"
  label="SELECT CATEGORY"
  item-text="name"
  :items="categoryList"
  return-object
  ></v-select>
<v-select
  v-model="subcategories"
  label="SELECT SUBCATEGORY"
  :items="categories.children"
  item-text="name"
  ></v-select>
<p>categories: {{ categories.children }}</p>
<p>subcategories: {{ subcategories }}</p>
</v-app>
</template>

<script>
export default {
  data() {
    return {
      categories: '',
      subcategories: '',
      categoryList: [
        {
          name: 'CATEGORY 1',
          code: 'cat 1',
          children: [
            {
              name: 'SUBCATEGORY 1-1',
              code: 'subcat 1-1',
            },
            {
              name: 'SUBCATEGORY 1-2',
              code: 'subcat 1-2',
            },
            {
              name: 'SUBCATEGORY 1-3',
              code: 'subcat 1-3',
            },
          ]
        },
        {
          name: 'CATEGORY 2',
          code: 'cat 2',
          children: [
            {
              name: 'SUBCATEGORY 2-1',
              code: 'subcat 2-1',
            },
            {
              name: 'SUBCATEGORY 2-2',
              code: 'subcat 2-2',
            },
            {
              name: 'SUBCATEGORY 2-3',
              code: 'subcat 2-3',
            },
            {
              name: 'SUBCATEGORY 2-4',
              code: 'subcat 2-4',
            },
          ]
        },
        {
          name: 'CATEGORY 3',
          code: 'cat 3',
          children: [
            {
              name: 'SUBCATEGORY 3-1',
              code: 'subcat 3-1',
            },
          ]
        },
      ],
    }
  },

  methods: {
    initializeSubcategories() {
      this.subcategories = '';
    },

  },
};
</script>

実行結果
f:id:yoheiwatanabe0606:20211130163452g:plain


f:id:yoheiwatanabe0606:20211130161206p:plain

  • Click the Category Select

f:id:yoheiwatanabe0606:20211130161344p:plain

  • Select a Category

f:id:yoheiwatanabe0606:20211130161724p:plain

  • Click the Subcategory Select

f:id:yoheiwatanabe0606:20211130161828p:plain

  • Select a Subcategory

f:id:yoheiwatanabe0606:20211130161918p:plain

  • Bug: if no categories are selected, then a subcategory is no data available

f:id:yoheiwatanabe0606:20211130162024p:plain

続きを読む

書評: 鈴木宏昭著『認知バイアス 心に潜むふしぎな働き』

概要

人間の認識に関するバイアスがわかりやすくまとまっている良書


内容
我々は普段から考えたり、判断したり、ものを見たり聞いたりする。そのような心の働きを人認知機能というが、それは人間特有のバイアス(つまり歪み)がある。そのような認知バイアスを科学的・実験的に研究する分野が認知科学であり、本書は認知科学の知見を第1章から第8章まで紹介されている。

第1章は「注意と記憶のバイアス」であり、注意は極めて限られているし、記憶は平気で捏造する。例えば、被験者に自動車事故の動画を見せて、その後に実験者は質問する。一方の被験者では「自動車が衝突したとき、時速何キロメートルくらいのスピードでしたか?」と聞く。他方の被験者では「自動車が激突したとき、時速何キロメートルくらいのスピードでしたか?」と聞く。すると、被験者の記憶は質問によって更新されて、「激突」と聞かされたグループは「衝突」グループに比べて15キロメートル程度その速度を多めに見積もっていたという。

第2章は「リスク認知に潜むバイアス」である。一言で言えば、「思い出しやすい事象はよく起こっている事象である」というバイアス(利用可能性ヒューリスティック)である。
そのバイアスがよく現れている事例は「最近、凶悪事件が増えている」と思ってしまうことである。データから見ると、凶悪犯罪は減少傾向であるし、若年層の犯罪は減少している。にもかかわらず、「凶悪事件が増えている」と思ってしまうのは、強烈な凶悪事件を我々が覚えていることである。さらにその凶悪事件はメディアで連日報道されることによって、リハーサル効果を得て、覚えやすくなる。すると、覚えやすいから「凶悪事件が増えている」と認知が歪められるのである。ただ、このヒューリスティックバイアスは逆に利用することもできるという。

第3章は「概念に潜むバイアス」である。連言錯誤という論理的にはあり得ない判断をしてしまう。また、カテゴリを作成して対象を関係付ける際に、プロトタイプというものを作成して、ある対象がカテゴリのメンバーかどうかを判断する。プロトタイプは多くの事例からできるものもあれば、たった一つの事例から作成することもある。そこには必然的に偏見やバイアスが生じてしまう。例えば、イチロー選手が渡米して活躍したとき、アメリカの球団のスカウトは日本にはイチロー選手のような選手が大勢いると勘違いした。それは、スカウトがイチロー選手を日本球界のプロトタイプとみなしたからである。だが、イチロー選手は日本の代表ではあるが、日本選手平均を体現しているわけではない。アメリカのスカウトは代表例をプロトタイプと勘違いしてしまった。

第4章は「思考に潜むバイアス」である。これは確証バイアスである。有名な「4枚カード問題」実験から議論が始まっている。

第5章は「自己決定というバイアス」である。我々は一見すると自由意志によって自己決定を意識的におこなっていると考えている。しかし、実際は我々の行動の原因は無意識に基づいているということである。もちろん、この無意識研究は科学的におこなわれた結果である。

第6章は「言語がもたらすバイアス」である。言語は様々な利点があると同時に欠点もある。例えば、言語は記憶を阻害するし、言語は思考を停滞させる。

第7章は「創造(について)のバイアス」である。イノベーションのアイディアは突如としてひらめくものだと思いがちだが、実際は革新的アイディアは徐々にひらめくものであることが明らかにされている。

第8章は「共同に関わるバイアス」である。
これまでの章では人間個人に潜むバイアスを取り上げた。だが、バイアスは人間個人のだけではない。
本章では集団となることによって生じるバイアス、つまり共同のバイアスを取り上げる。
共同のバイアスは3種類ある。それは同調と分散(分業)と共感である。
同調のバイアスとは、人に従うことによって個人の判断が誤るバイアスのことである。そのようなことを示す実験は数多くある。例えばアッシュの実験というものがある。それはある簡単なテスト(個人でおこなえば99%以上正解する問題)を被験者におこなってもらう。だが、同じ問題を集団でおこない、その集団(サクラ)が間違った選択肢を主張すると、被験者はその意見に従ってしまうのである。この現象は人種や国籍は関係ない。というのも、その被験者はアメリカ人である。
さらに同調のバイアスはブレーンストーミングにも働く。ブレーンストーミングは生産性をもたらさない。むしろネガティブに働く。その理由は「こんな発言をしたら周りから変に見られるかも」と考えて、発言を控えてしまうからである。
次に分散のバイアスとは、集団になることで責任が分散してしまうバイアスのことである。
例えば、誰かが助けてと叫んだとする。周りに自分一人だったら助けるが、集団となると「誰かが助けるはず」と思って、誰も助けなくなるのである。
さらに分業による責任転嫁である。典型な例がナチスユダヤ人虐殺である。有名なミルグラムの実験で示されることは、我々はしばしば権威に従ってしまうことや我々は「ただ指示に従っただけだ」と自分で納得するということである。分業することによって自分のごくわずかの仕事に注視して、全体を見ず責任も矮小化してしまう。
最後に共感のバイアスである。それは共感(特に情動的共感)によって我々の判断を誤らせるバイアスである。

最終章(第9章)とおわりにではこれまでの認知バイアスについての総評がまとめられている。認知バイアスそのものについての議論である。
第9章は「「認知バイアス」というバイアス」である。この議論はさすが専門家と思った。評者のような素人は、本に書いてあることを信じて疑わず、そのくせタチの悪いことにその薄っぺらな知識を他人に披歴したがる。「人間はね、権威に弱いんだよ。知ってる?ミルグラムの実験ってのがあってね」のように。
しかし、専門家はそうではない。常に批判的に考える。「この実験のデザインは不十分ではないか」のように。もちろん実験の提案者である心理学者も細心の注意を払って実験をおこなうが、それでも心理学者自身の問題設定によりバイアスが作られることがある。そしてそれが定説となることもある。これが「「認知バイアス」というバイアス」である。著者は「認知バイアス」というバイアスの例を鮮やかに示し、評者にまざまざと見せつけられた。

幼児期の子供には数の保存概念がない、というのが長らく発達心理学を支配してきた考え方だった。付け加えたり、取り去ったりしない限り、ものの数は不変だ、つまり保存されるというのが、数の保存の意味するところだ。ところがこうしたごく当たり前のことを幼児は理解していないとされてきた。子供の前に、たとえばアメを5つ並べ、これと同じだけ並べるように言う。そして「同じだけありますか」と聞く。その後、片方の列の間隔を広げたり、狭めたりする。そしてもう一度「同じだけありますか」と尋ねる。すると年少の子供(3、4歳)の多くは、2つの列は同じではないと答えてしまう。  これについて私の友人であった故マイケル・シーガルは、幼児のこうした無能さは実験によって生み出されたアーティファクトだと断じた。アーティファクトというのは一般には人工物という意味だが、この文脈では実験の操作により、本来はないはずの現象が人為的に生み出されてしまうことを指す。こうした次第だから、アーティファクトというのは、実験を行う科学者たちがもっとも恐れるとともに、忌み嫌うものだ。  さてこの実験のどんな部分がアーティファクトを生み出すのだろうか。シーガルは、同じ質問を2度することによって生み出されるのだと言う。同じことを2度聞くというのは、単なる繰り返しではない。独特なメッセージを生み出す。それは、初めの答えとは違うものを相手は期待している、初めの答えに納得していない、初めの答えは間違いだ、等々のメッセージだ。

子供たちがもし仮に保存の概念を獲得していたとしよう。つまり、動かしたって数が増減する(そんなバカげた)ことはないと、私たちと同じように考えているとしよう。すると、動かす前に聞かれた質問に一度「同じ」と答えたのに、もう一度同じことを聞かれた、と子供たちは考えるだろう。すると「前と違うことを言えと言ってるんだな」とか、「同じって長さのことかな」などと考え始める。そして「違います」という答えを出してしまうのではないだろうか。  シーガルは実験を工夫して、質問を一度しかしない条件で実験を行った。すると標準的な保存課題では間違えてしまう子供の多くが一貫した答えを出すことがわかった。またこうした子供たちに、保存課題で間違えた答えを出す子供のビデオを見せると、「この子は噓を言っている」とか「本当はそう考えてない」などと答えるという。そもそも、子供が本当に列の長さが数に影響すると考えている可能性はとても低いのではないだろうか。もしそうだとしたら、アメを2つ並べて、子供が「もっとちょうだい」と言ったとき、その間隔を広げれば、子供は満足するはずだ。でもそんなことはあり得ないように思う。

感想

総じておもしろかった。大学1, 2年生の教養レベルの認知科学の内容がまとまっていたと思う。各章の最後にブックガイドがあり、気になったものはその参考文献をもとにより学ぶこともできるので、それも初学者にとってはいい配慮だった。参考文献はすべて日本語で読めるものであったが、英語の論文もあってよかったなとも思う。
特に最終章とあとがきは面白かった。素人に毛が生えた物知り(誰!?「TちばなRい」とか「DぐちHるあき」とか)の話は、話程度に聞き流せばいいのかなと思った。専門家も伊達じゃないなと思った。評者こそが素人に毛が生えた物知りなのでそこは胆に銘じた。
認知科学の知見を道路設計のデザインに利用しているという話も興味深かった。そのような応用ができることこそが科学の有効性の所以であるからである。



僕から以上

FirefoxでSeleniumを動かすと余計なログが出るので出ないようにする

概要
FirefoxSeleniumを実行するとgeckodriver.logというログファイルが作成される。そのようなログファイルが作成されないように設定する。

ソースコード

import os
import time
from selenium import webdriver

DRIVER_PATH = '/usr/local/bin/geckodriver'

driver = webdriver.Firefox(executable_path=DRIVER_PATH, service_log_path=os.path.devnull)
driver.get('https://www.google.com')

time.sleep(3)

driver.quit()


前提
とりあえずPythonSeleniumを実行できること。Seleniumがインストールされていること。

続きを読む

Pythonで正規表現について学ぶ 使い方と書き方 その1

概要
正規表現についてPythonで理解する。
まず、Pythonでの正規表現の使い方をまとめて、その後に正規表現について解説する。
最後に、よく使う正規表現のパターンをまとめる。

  • はじめに 正規表現について
  • Section 1 Pythonでの正規表現の使い方
    • Section 1.1 finditer すべてのパターンマッチを取得する
    • Section 1.2 sub 正規表現にマッチする単語を指定の文字に入れ替える
    • Section 1.3 split 正規表現にマッチする単語で文章を分ける
    • Section 1.4 match 文章の先頭が正規表現にマッチするかどうか
    • Section 1.5 search 文章が正規表現にマッチするかどうか
    • Section 1.6 IGNORECASE 大文字・小文字の区別なしのためのフラグ
  • まとめ
  • 参考文献

はじめに 正規表現について

正規表現(regular expression)とは文字列ないで文字の組み合わせを照合するために用いられるパターンのことです。
これだけだと全く意味がわからないと思うので、正規表現が使われるケースを考えて、正規表現の目的を考えてみましょう。

次のような文章があるとします。

A: Pythonって知ってる?
B: うん。しっているよ。pythonでしょ?
C: 俺も知っている。蛇のことだよね?
B: 違うよ。プログラミング言語だよ!
A: 二人ともちがうよ! コメディ番組だよ!!(注: 空飛ぶモンティパイソン)

この文章の中で「Python」や「知っている」や「違う」という言葉が出ていますが、書き方がそれぞれ異なっています。

  • Python: python、パイソン
  • 知っている: 知ってる、しっている
  • 違う: ちがう

ここから例えば「パイソン」という言葉を、その言葉のバラつきを考慮した上で、一気に取得したいとき、正規表現という書き方を用います。

また、同じ日付を表しているデータがあったとしても、あるところでは「2021/08/29」と書かれていて、べつのところでは「21/08/29」と書かれたり、「2021.8.29」と書かれているかもしれません。このようにデータに対してばらつきがあるにもかかわらず、あるパターンで一気に取得したいときに正規表現は使われます。

今回はまずPythonでの正規表現の使い方をまとめて、次に正規表現の書き方を解説します。最後に、よく使うパターンをまとめます。

続きを読む

【VS Code】Import "MODULE" could not be resolved Pylance(reportMissingImports)の対処法

概要
VS Codeで自作モジュールmoduleをインポートしたソースコードを見ると、Import "module" could not be resolved Pylance(reportMissingImports)とエラーが表示される。 これはソースコード自体のエラーではなく、VS Codeのエラーである。 VS Codeの設定を変更することで、この問題は対応できる。その流れを書く。

はじめに

次のようなディレクトリ構成とテストコードを書きました。

blogtest
└── test
    ├── __pycache__
    │   └── module.cpython-37.pyc
    ├── dir1
    │   ├── __pycache__
    │   │   └── module1.cpython-37.pyc
    │   ├── module1.py
    │   └── subdir1
    │       ├── __pycache__
    │       │   └── module2.cpython-37.pyc
    │       └── module2.py
    ├── main.py
    └── module.py

f:id:yoheiwatanabe0606:20210723223446p:plain

# main.py
###
import sys
sys.path.append('./dir1')
sys.path.append('./dir1/subdir1')

import module
import module1
from module2 import func2

print('------------- begin -------------')
module.func()
module1.func01()
module1.func02()
func2()
print('------------- end -------------')

# module.py
###
def func():
    print('-----------------')
    print('Success import func from module!!')

# module1.py
###
def func01():
    print('-----------------')
    print('Success import the func01 from module1!!')

def func02():
    print('-----------------')
    print('Success import the func02 from module1!!')

# module2.py
###
def func2():
    print('-----------------')
    print('Success import func2 from module2!!')

実行結果は期待値通りとなりました。

  • 結果
$ python main.py
------------- begin -------------
-----------------
Success import func from module!!
-----------------
Success import the func01 from module1!!
-----------------
Success import the func02 from module1!!
-----------------
Success import func2 from module2!!
------------- end -------------



しかし、main.pyファイルをVS Codeで見てみると、次のように黄色い線で警告が生じました。 f:id:yoheiwatanabe0606:20210723223449p:plain



そこに矢印を当てるとImport "module1" could not be resolved Pylance(reportMissingImports)というエラーが生じました。 f:id:yoheiwatanabe0606:20210723223456p:plain



このエラーはソースコード自体のものではなく、VS Codeのほうのエラーです。今回はこのエラーの解決方法を説明します。自分用のノートと他の誰かのために。

解決策

  1. コマンドパレットを開く。ショートカットキーはcommand + shift + Pです。または、次のようにして開いてください。 f:id:yoheiwatanabe0606:20210723223502p:plainf:id:yoheiwatanabe0606:20210723223509p:plain

  2. 検索ボックスにsettingsと入力して、Enterを押す。 f:id:yoheiwatanabe0606:20210723223516p:plain

  3. settings.jsonが表示される。 f:id:yoheiwatanabe0606:20210723223522p:plain
    注:
    コマンドパレットにsettingsを入力しても、何も変化がなくsettings.jonが表示されない可能性があります。そのときはなんとかしてsettings.jsonファイルを他の方法で見つけてください。もしかしたら、コマンドパレットの前に設定(Settings)を押して、そこにsettingsと入力してから、再びコマンドパレットでsettingsと入力しなければならないかもしれません(私はその方法でsettings.jsonを見つけました)。

  4. "python.analysis.extraPaths"に自作モジュールの相対パスを設定する。 今回の場合、testディレクトリが一番上ですので、そこからの自作モジュールのパス./dir1./dir1/subdir1を設定します。 f:id:yoheiwatanabe0606:20210723223531p:plain

  5. エラーは解決されます。もしもエラーが解決されなければ、一度VS Codeを再起動してください。ですがおそらく再起動の必要はないと思います。 f:id:yoheiwatanabe0606:20210723223539p:plain

ちなみにですが./dir1だけが記入されてもエラーは残ります。./dir1配下をrecursiveに参照しないため、ちゃんと./dir1/subdir1も書かなければなりません。 f:id:yoheiwatanabe0606:20210723223546p:plain

ディレクトリの場所が変わったとき

これまでの例はtest配下での対応でした。ですが、もしそのひとつ上の階層であるblogtest配下に移ると再びエラーが生じます。ですので、再びsettings.jsonを修正してください。

test blogtest
./dir1 ./test/dir1
./dir1/subdir1 ./test/dir1/subdir1

f:id:yoheiwatanabe0606:20210723223553p:plainf:id:yoheiwatanabe0606:20210723223602p:plain



僕から以上

ロシア語の「欲しい(хоте́ть)」のまとめ

概要
ロシアで生活する上で欠かせない表現の一つは「私は〇〇したい/したくない」や「あなたは私に〇〇してほしい」などの願望・要望を言うことである。
今回は「私は〇〇が欲しい(I want something)」と「私は〇〇したい(I want to do something)」と「私はあなたにして欲しい(I want you to do something)」の表現をまとめる。

現在形

1. 私は〇〇が欲しい。

文法

Я хочу́ 対格 (I want something.)
Я не хочу́ 対格 (I don't want something.)

注意: 基本的にхоте́тьのあとの名詞は対格で問題ありませんが、たまに生格のときもあります。どういうときだったかは覚えていませんが(たしか、抽象名詞のときは生格じゃなきゃいけなかったんだっけ...忘れた)。

補足 この後も様々なパターンの表現がまとめていますが、否定文は主語Яと動詞хоте́тьの間にнеを入れればできますので、否定文の例題は省略します。

例文 1:

Я хочу́ маши́ну.
私は車が欲しい (I want a car.)

例文 2:

Я хочу́ ко́фе.
私はコーヒーが欲しい (I want a cup of coffee.)

例文 3:

Я не хочу́ де́ньги.
お金は欲しくない(I don't want money.)

2. 〇〇が欲しいのですが(丁寧な表現)

文法

男: Я хоте́л бы 対格
女: Я хоте́ла бы 対格

例文 1:

Я хоте́л(хоте́ла) бы ко́фе.
コーヒーが欲しいのですが... (I would like a cup of coffee.)

3. 私は〇〇がしたい

文法

Я хочу́ 動詞(不定形)

例文 1:

Я хочу́ купи́ть ко́фе.
私はコーヒーを買いたい (I want to buy a cup of coffee.)

例文 2:

Я хочу́ пи́ть ко́фе.
私はコーヒーを飲みたい (I want to drink a cup of coffee.)

4. 〇〇したいのですが(丁寧な表現)

文法

男: Я хоте́л бы 動詞(不定形)
女: Я хоте́ла бы 動詞(不定形)

例文 1:

Я хоте́л бы купи́ть ко́фе.
コーヒーを買いたいのですが... (I would like to buy a cup of coffee.)

例文 2:

Я хоте́л бы пи́ть ко́фе.
コーヒーを飲みたいのですが... (I would like to drink a cup of coffee.)

5. 〇〇できたらなぁ(願望)

文法

男: Хоте́л бы я, 動詞(不定形)
女: Хоте́ла бы я, 動詞(不定形)

例文 1:

Хоте́л(Хоте́ла) бы я, купи́ть маши́ну.
車が買えたらなぁ(I wish I bought a car.)

6. 私はあなたに〇〇してほしい

文法

Я хочу́, что́бы вы 動詞(過去形)

例文 1:

Я хочу́, что́бы вы купи́ли ко́фе.
私はあなたにコーヒーを買って欲しい(I want you to buy a cup of coffee.)

例文 2:

Я хочу́, что́бы вы одолжи́ли де́ньги.
私はあなたにお金を貸して欲しい(I want you to lend money.)

одолжи́ть: 貸す

7. 〇〇していただきたいのですが(丁寧な依頼)

文法

男: Я хоте́л бы, что́бы вы 動詞(過去形)
女: Я хоте́ла бы, что́бы вы 動詞(過去形)

例文 1:

Я хоте́л бы, что́бы вы купи́ли маши́ну.
あなたに車を買っていただきたいのですが (I would like you to buy a car.)

過去形

1. 私は〇〇が欲しかった

文法

男: Я хоте́л 対格
女: Я хоте́ла 対格

現在形のときの注意事項は同様に当てはまります。

例文 1:

Я хоте́л де́ньги.
私はお金が欲しかった (I wanted money.)

2. 私は〇〇したかった

文法

男: Я хоте́л 動詞(不定形)
女: Я хоте́ла 動詞(不定形)

例文 1:

Я хоте́л купи́ть маши́ну.
私は車を買いたかった(I wanted to buy a car.)

3. 私はあなたに〇〇してほしかった

文法

男: Я хоте́л, что́бы вы 動詞(過去形)
女: Я хоте́ла, что́бы вы 動詞(過去形)

例文 1:

Я хоте́л, что́бы вы купи́ли маши́ну.
私はあなたに車を買って欲しかった (I wanted you to buy a car.)

未来形

хоте́тьには未来形の使い方はありません(それはwantと同様)、

終わりに

「〇〇したい/したくない」や「〇〇してほしい/してほしくない」などの自分の願望や要望を相手に伝えられるようにしましょう。それがロシアで生活するために欠かせないことですので。
ですが、重要な表現にもかかわらず、かなり煩雑で理解しづらいのは否めません。この記事が少しでも役に立ってくれたら嬉しいです。



(僕から以上)

Macで自作のコマンドを作成する方法

概要
Macのターミナルから使える自分用のコマンドを作る方法を示す。
その方法は2通りあり、一つはパスを追加するのと、もう一つはシンボリックリンクを使う方法である。


注意
ここでは自作用のコマンドの作り方をまとめますが、ここで利用しているコマンド(e.g. source)やシェルスクリプトのことはまだ詳しく理解していません。単に「こうすれば自作コマンドができます」ということを示しているだけです。

前提知識と環境

やりたいこと

ホームディレクトリ配下に自作コマンドを格納するディレクトcommandを作成して、その中にnewcommandというコマンドを作成すること。


STEP 1: 自作コマンドを格納するディレクトリを作成する

自作コマンドを格納するディレクトリを作成します。

$ pwd
/Users/USENAME
$ mkdir command

任意の配下で問題ありませんが、今回はホームディレクトリ配下(/Users/USENAME)にcommand作成します。


STEP 2: 自作コマンドを作成する

command配下にnewcommandというコマンドを作成します。このとき拡張子はつけないことに注意してください。

$ cd ./command
$ vi newcommand

newcommandに実行したい処理を記入してください。今回はテストのため、Hello, New Command!を表示する簡単な処理です。

#!/bin/sh
echo "Hello, New Command!"

一行目の#!/bin/shは、コマンドnewcommandシェルスクリプトとして実行させるために必要なコードですので、必須です。

処理が書き終わったら、:wqでコマンドを保存します。


STEP 3: コマンドに実行権限をつける

作成したコマンドnewcommandに実行権限をつけます。

$ pwd
/Users/USERNAME/command
$ ls -l
-rw-r--r--  1 username  staff   0 May 29 02:35 newcommand
$ chmod 777 newcommand
$ ls -l
-rwxrwxrwx  1 username  staff   0 May 29 02:35 newcommand



STEP 4: コマンドの実行準備をおこなう

ここから2通りの方法があります。
一つ目は、現在使っている(デフォルトの)シェルzshにパス/Users/USERNAME/commandを追加する方法です。

STEP 4.1: パスを追加する

ホームディレクトリ配下にあるファイル.zshrcを修正します。

$ vi ~/.zshrc



.zshrcに次のコードを書き加えて保存します。

export PATH=$HOME/command:$PATH

あとは、再起動するかsource ~/.zshrcを実行すればOKです。
かくして、自作コマンドが実行できるようになります。
which newcommandと打つと、コマンドが認識されると思います。

$ which newcommand
/Users/USERNAME/command/newcommand
$ newcommand
Hello, New Command!


注意

sourceコマンドの理解はいまいちです。シェルスクリプト実行するためのコマンドということは知っていますが、その意味はまだわかりません。

STEP 4.2: シンボリックリンクを設定する

もう一つは、シンボリックリンクを利用する方法です。自作コマンドnewcommand/usr/local/binにリンクさせます。

$ ln -s ~/command/newcommand /usr/local/bin



かくして、自作コマンドが実行できるようになります。
which newcommandと打つと、コマンドが認識されると思います。

$ which newcommand
/usr/local/bin
$ newcommand
Hello, New Command!


注意

lnコマンドは全然わかっていません。ハードリンク(ノーオプション)とシンボリックリンク(-s)の違いもわかりません。
さらにシンボリックリンクの削除unlinkもわかっていません。




僕から以上