なーたのおぼえがき

なーたのおぼえがき

つくったものとか

人工言語① −概要-

Twitterで昨日?今日?言ったんだけど最近人工言語をちょっとやってて(?)
人工言語と言っても日本語とか英語とかそういうアレではなく話者の少ない言語の方なんですよね。
題名に1ってついてるのはこれがUS配置キーボードでのタッチタイピング練習にもなっているのとちょいとその辺調べるのも楽しそうという雑な理由です。
では今回はさらっと概要とかをまとめていきます。

きっかけ

まずは私が人工言語を知ったきっかけ?というか興味を持ったきっかけから。興味無かったら飛ばしてね⭐︎
同世代の人がいたらわかるかもしれないけど教材(科目忘れたけど多分英語か国語)でエスペラント語出たね。
まあそれがきっかけではないんだけど、小学校中学校で「自分の生まれた年について調べよう」みたいな授業課題あるよね?それで生まれ年にリンコスがノイズエンコードされて宇宙に向かって発信されてたのを知ったのが最初かな。
いやもうここまで言ってしまうと歳がバレるから書くんだけど、1999生まれでADSLと同い年だよ。
アレシボ・メッセージが強烈なせいで1974と混同されがちなんだけどまあリンコスは1999に発信されてるから。アレシボみたいに5万年かかるとかじゃないので。

人工言語ってなに?

「個人や団体などによって語彙や文法が人為的に作られた言語の総称である。」
www.weblio.jp
らしいですね。
ちなみに対義語は自然言語です。

どんな分類があるの?(独断と偏見)

上の辞書にもあるように統一言語として考えられたものが多そうですね。とりあえず知っているものを独断と偏見で分けるとこうなります。

⑴世界的に共通のものとして構想・製作された言語
⑵特定の目的のために製作された言語
⑶コンピュータと和解するための言語
⑷創作上の要素として使用される言語
⑸言語であるとみなされて成立したもの

ではそれぞれについて例をあげつつ説明しよう。

世界共通語的構想によるもの

これは正確な言い方としては「国際補助語」って言います。共通の母国語を持たない人間が会話するのに使う言語って感じ。
今だとそうだね、話者数で見れば中国語も国際補助語に当たるだろうけど圧倒的に英語が強いかな?
でも今あげた中国語と英語はいわゆる自然言語で、国際補助語として作られたわけではない。でも、世の中には最初から国際補助語として構想・作成された言語もあってそれがここに当たると考えるよ。
例としてあげると、エスペラント語・イド語・インターリングアなんかが該当します。

特定の目的のための言語

これは特に言い方が決まってない、というか人工言語の一つってまとめ方をされる分野だね。
個人的にはこれが一番人工言語としてロマンがあると思っていますね。
宇宙人と通信したりするために開発されたリンコスがその筆頭かな?
これをこうするために使うよって言語で明確な目的の上で製作されているけど国際補助語ではない。何よりその目的の幅がとても狭い。
そういう特徴を持つものだと仮定しているよ。

コンピュータとの和解

ざっくりいうともう簡単プログラミング言語ですね。ちなみにアセンブリ言語含むからね。
ただしフローチャートとかそういう記号を主として用いるものはこっちではなくて一つ上って認識しています。なぜならあれはプログラミング言語と和解するための言語というか記号群だからね。

創作上の言語

これもまた簡単に言える。創作、まあ有り体に言えば小説なんかで特殊な読みや文法、語彙を持って明確に話されていると言われているもしくははっきりとその分を認識できるもののみをカウントするよ。
代表例としてはリパライン語?アレは細かく書いてあるししっかりと構成されているからまさしく人工言語だよね。

言語とみなされたもの

これちょっとわかりにくいかもしれないけど、オンドゥル語を代表例にしよう。つまりそういうことである。
言い間違いやそう聞こえるという理由で言語じゃない?これ言語だよね?と言語になっちゃったもの。
色々あるよねこれ系だと多分。

ということでざっくりまとめたので今回はこれで終わり。次からはそれぞれの分類の例について詳しく書いていきます。思いつく限り、飽きるまで?
書く気はあるから、そのうちちゃんとまとめるしリンク貼っておくね多分?

WordPressのローカル環境を作ろう

今回はめっちゃ短いです。なぜならソフト一つの機能紹介&操作備忘録。

前提

Thinkpadの方はこれMacの。

公開するとかサーバにいちいち上げるのめんどいとかそんな感じの理由から選択されたローカル環境でその辺にいっぱい情報転がってるけど残念なこと?に名前的な問題でグ グラビリティ低めなので自分用でまとめる的な感じです。

「Local by Flywheel」

今回入れるのはこちら「Local by Flywheel」これ最初だけ見たらすごくググラビリティ低いよね。でもめっちゃ便利。というか環境だしそりゃそうなんだけど。あとこれ外部に共有できるからプロトタイプ見せるとか進捗これよとかにも使えます。よいよ!!
サイトはこちら
local.getflywheel.com

入れ方

f:id:Clairdeluna_eve:20190314193620p:plain
これのOS選択、work Email、Number of Siteを入力して「GET IT NOW!」
そしたら落ちてきます。ここからちょいと分岐。

Windows

インストーラが降ってくるので実行。
そしたら始まってよくあるインストールのやつなのでいつも通りにします。そして終わったら「エラーレポート送信する?」みたいなの来るので好きなように。

Mac

zipファイルが降ってくるので解凍してアプリケーションに突っ込んで実行。
これも終わったら「エラーレポート送信する?」って来るので好きなように。

ここからは共通。「エラーレポート送信する?」が消えるとシンプルなデザインのウィンドウが出てるでしょう。「LET'S GO!」をクリックします(マリオじゃないよ)。
そしたらVirtual Boxとかその辺がセットアップされますね。
終わったらまっさらな画面に「+CREATE A NEW SITE!」って出てるのでそれをクリック。
するとサイト名を入力してね、と言われるのでします。
f:id:Clairdeluna_eve:20190314194919p:plain
で、「CONTINUE」。そしたら
f:id:Clairdeluna_eve:20190314195006p:plain
こうなるので、別に細かく指定しないでいい人はそのまま。
いろいろ要件がある人(PHPのバージョンとかね)はCustomでいじって、「CONTINUE」。
f:id:Clairdeluna_eve:20190314195253p:plain
WordPressのユーザーネームとパスワードを入力。マルチサイトにしたい人は「ADVANCED OPTION」をクリックしてサブドメインディレクトリを選択。
「ADD SITE」でできます。

使い方

サイトの追加ができると大体こんな感じになるんだけど(サイト名とかは気にしないで今やってるやつで全然関係ないので。気になる人は頑張って無視して)
f:id:Clairdeluna_eve:20190314195814p:plain
んでは機能。

右向き矢印?みたいなやつ

サイト名(ここではGlassPieceって大きめの文字)の下にある灰色のところ。ここの丸に>が入ってるみたいなやつをクロックするとPCの中のドメインフォルダ?みたいな感じのとこに飛ぶ。「ドメイン(持ってるサーバの構成がそのままといっても過言ではなさそうな)フォルダ」というのが長いから略しただけなので本当の語句じゃないよ☆

ADMIN

ブラウザに飛んでWordPressダッシュボードが開く。ログインがいるよ。

VIEW SITE

ブラウザに飛んでサイトが見れる。

OVER VIEW(タブのとこ)

もろもろのバージョンとか。ここでWoedPress更新したりできるよ。
ちなみにPHPのとこのインフォメーション感あるのをクリックするとPHPに飛びます。

DATABASE(タブのとこ)

データベースのあれやこれがみれるよ。ADMINERでまあこれもいろいろ見れるね。

SSL(タブのとこ)

OpenSSL関係のいろいろ。

UTILITES(タブのとこ)

名前の通りユーティリティなんだけど、MailHogしかないというね。

タブのとこに関してはそんなにいじらないから気にしなくてもいいか。

クリックするとライブリンク(編集がすぐに反映される共有可能リンク)が発行されるよ。便利なのはあれかな、エミュレータじゃなくて実機でも確認できるからタブレットスマホPCでリアルタイム検証できるよ。

STOP SITE(上の方)

サイトが停止するよ。正確にはサーバが止まるので開発終わったら止めとくといいかな。リソース食わないし。

そのほか

そのほかって言っても特にない気がしてきた。
ドメインファイルみたいなのの中でテーマファイルは
「C:\Users\[ユーザー名]\Local Sites\[サイト名]\app\public\wp-content\themes」か「MacintoshHD/ユーザー/[ユーザ名]/Local Sites/[サイト名]/app/public/wp-content/themes」にある。まあ、よくあるサーバと大体同じ。

ということでいったん終了。面白い小説見つけたので読みたい。

いつものThinkPadさんスペック

何使ってんだっけ?と思って毎度毎度調べるの面倒になってきたのとMacは書いてるのにこれは書いてないねと気づいたからまとめる。

PC本体はLenovoThinkPad P51。IBM時代の7段キーボード使ってみたいよね。
CPUはIntel core i7-7820HQで最大3.90GHzだったっけな。
GPUNVIDIA Quadro M1200。ドライバはちゃんと最新にしてる。
んで、メモリはDDR4の32GB、Dドライブは1THDD、CはRAIDは0で予算の関係上512GBのSSD
あとなんかあったっけ?
あ、バッテリは4セル。えーとディスプレイは15.6のFHD。指紋認証も付けた。
こんなもんか?確か三十くらいでハイエンドモデルだったか?
carbonと迷ったけどなんとなくこっちにした。

購入時全然VRとかやる気なかったから一つ上じゃなくてこれにしたけど、困ってないし割と快適に使えてるから問題ないね。学校のとかその辺のとかで「やーいおまえのPCスマホ以下ー!」みたいなクソ筐体見かけるから相対的に良い感じしてるというのは否定しない。あれ真面目に人権ないよね。せめてメモリ16はいるでしょ。4とか8は基本的人権すらないじゃん?

Mac Book Proが届きました

題名の通りです。やったね☆
なのでこれからはMac OS系の話も出てくるけどちゃんとカテゴリ分けします。
セットアップ関連やらんとなあと思いつつ面倒なのでいったん保留。
そもそもですね、三月に入ってから届くってメールできてたのに早いわ。なーんもやってねえよ?!ということもあって完全保留です。詳細?えっとね

15インチMac Book Proのスペースグレイ。Touch BerとTouch ID搭載モデルなのだ。
ただしこいつRunatiaなのでメモリ増設が不可能なんで、実質選択肢が15インチになっただけともいう。なんせ13インチはメモリが16GBまで。今の子(ThinkpPad P51)よりもメモリしょっぼくなるのだけはマジで勘弁。ということでDDR432GB。
で、CPUは第八世代の2.6GHz6コアIntel Core i7。i9もあったんだけど、ベンチマーク見る限り概算11%の高速化でさすがにそこに3万以上出すほどの価値を見出せなかったから。だってコスパ悪いでしょ。CPUにこだわらないならi7で十分。
ストレージは512GBのSSDSSDは性質上突然ぶっ壊れる挙句に大容量(512以上)じゃないと早くないので。1Tも考えたんだけど、ストレージなんて外につければいいし。
あとグラボか。Radeon Pro Vega 20。これに関してはマジで出来心というか。3Dやりたかったんだよね。以上。
あ、キーボードはUS配置。理由?使いたかったから!

Touch Berは自分で使いやすいようにソフト?作るつもりだからたぶんまとめる

Androidのアプリデータ移行

お久しぶりです。先日不注意というか、子供に激突され(向こうが突撃してきた)スマホ画面がバッキバキに。正確にはガラス部分だけなのでタッチパネルは効くし使えるんですが、大問題が一つ。ガラス、手に刺さるんですよ。
それによって買い替えというかまあスマホを変える必要が出てきまして、そこでKDDIと契約している関係上めっちゃ便利なシステム「故障紛失サポート」とよくわからん交換システムを利用して、まったく同じ機種のリフレッシュ品が届き、移行していっている最中です。
で、手順書曰くauのデータお預かり?みたいなやつを使えとのことなんですが、併せてGoogleさんのバックアップ&同期復元、galaxyクラウド(使用機種はSamsung galaxy s8です)を使用してデータ復元、よしこれで使えるね!となったはいいものの。
ええ、本当に残念なことに私が一番必要としているアプリケーションたち(日記、お小遣い帳など)のデータが一切保存対象に入っていないことに気が付きました。特に日記!!これほんと困る。ということでどうしても移行したいため、試行錯誤している経過を載せていきます(編集はリアルタイムでしていて、まとめ終わったら公開という形になっています)。
あ、お小遣い帳改め家計簿アプリはCSVin/exができたので解決済みです。いやあ便利便利。

いわゆる標準

先に挙げたauのデータお預かりサービスとGoogle先生のバックアップ、galaxyクラウドはだめだった、というかGoogle先生しかアプリ内容入ってなくてもうだめなので。
Google先生でデータ引継ぎができるアプリケーションはドライブのバックアップからアプリ選べばファイルという形で見られるので確認してね。
そしてこの三つはどう考えても検索で大量に引っかかってくるので割愛!
私の移行したいアプリはGoogle先生の引継ぎできるやつに入ってなかったんだよ!!泣きそう。

「JSバックアップ」というデータ移行アプリ

結論、だめ。
アプリインストール前にだめだということが分かったので試していません。
googleストアのレビューに対する回答で「アプリデータの引継ぎはできない。一括で入っていたアプリをダウンロードできるだけ」「ほかのアプリにデータに対してアクセスする権利がない」ということが明記されていました。そりゃそうだよね…なんとなくそうだろうなとは思ってた。
つまり、アプリケーションそのものであるAPKファイルのみバックアップ復元に対応してるってことになりますね。泣きたい。

ファイルを移そう

アプリだって所詮はファイルシステム上で走ってるプログラム。移行しようとすればファイル置き換えてどうにかなるんじゃないかな…?ということでアプリデータの保存場所に移動。
Androidでは内部ストレージのAndroid/data/[パッケージ名]というフォルダにアプリのデータは落ちていきます。SDカードに同名の階層ができてればそっちにも落ちるようにできたり。この辺まで書いてる時点ですでに半泣きです。
目的のフォルダを見つけ、中を確認すると…うーんこれは見事な空ファイル。こんなの移動したところでデータは動かない。だが物は試しもしかしたら隠しファイルとかであるかもしれん(死んだ目)
なかった。だよね!はーしんど…
ちなみに移行したいアプリは「無地日記」です。
ついでに言えばそのファイルなくても普通に動いたのでどう考えても無駄な行為です本当にありがとうございました。

そして行き詰る

アカウントを作るタイプじゃないし、どこかにデータが上がっているとは考えにくい…。正直どうしていいかわからなくなってきました。
ただそうなるとぱっと見で思いつくのはあとAPKにデータがある…?というものだけというわけでAPKを抽出する前にJSバックアップでできるのか(正確に言えば一覧を取得してきて新規で落としているのかどうかの確認)を検証。

というわけで「JSバックアップ」を一度検証する

さて、インストール終わってバックアップ作業をしているのですが。標準は基本的にもう移行終わっているのでアプリ一覧だけ取得して画像等、動画音声のバックアップをしているんですが、めっちゃ時間かかりそうなんですよね。ので私はイラっとしてもろもろを取りやめアプリ一覧だけに変更。すると瞬時に終わったので移行作業してみる。

結論。アプリ一覧からはだめでした。
一つだと手動で入れさせられたんですがそれもうバックアップっていう必要なくない??怒るよ???
まあ結論だけ言うと新しくAPKファイルを正規の場所から持ってくるだけでしたね。
しかもただのGoogle Storeへのリンク集。全部手動とかなめとんのか。

では次、APKバックアップというやつ。
これの面倒なところはアプリが多いとめっちゃ時間かかる挙句にキャンセル不可みたいで一度やっちゃうと地獄見るね、という感想でわかっていただけるかと。ちなみに私はいらないの消し忘れたまましてしまったので93個とかなってます。先が長い。
えーできました。やってみました。
結論から言うとできなかった。いえ、APKからのインストールはできました。
復元が成らなかったんです。うーん、どこにデータがあるんだ??

まずはデータの位置を探す

一応、という形でレビューを見ていったんですがみんな「バックアップがない」「広告やめい」しか言ってなくてほんとに草。標準仕様でバックアップはついていないようです。そりゃそう。そんなのあったらやってるわ。
ちなみにネットの海にも知見は漂っていませんでした。しょぼん。
で、APKのメタデータを見てみたのですが機種名とそのほかが載っている…?
サーバにありますかね、これ?データがサーバだと面倒というか…。
地獄のような手動コピーも若干視野に入れている状態になりましたね笑えん。

ということでこのメタデータを分析していきます。
簡単に手に入るけどさすがにさらしていいものか迷うな。
とりあえずぱっと見でわかることから
「無地日記」当然のごとくアプリ名ですね、はい次。
「jp.co.techmond.mujinikki」パッケージ名ですね、自明。はい次。
「40」突然の数字。不明ですね。次
「1.8.6」バージョンですね。次にわかるのは
「SCV36」えー、わかる人にはわかると思いますがauのGalaxyS8の商品コード?販売コード?みたいなやつですね。
この後ろにあるクッソながい英数字のやつが識別ID的な奴かなあと推測しているんですがどうなんだ。

というわけで、検証タイム。具体的に何をするのかというと新しいスマホのAPKを取得します。んで、メタデータを比較。
なんか開けるアプリが三種類あるなどうしよ。ということでまずはExcelで見てみます。
するとあら不思議ほかのデータは同じだというのに最後だけが違います。なーんでだ。answer:IDですなんてなったりしねえかな、というやつですね。しかもなんか二か所表示領域超えてるらしくオバーフローしてません?大丈夫?
スプレッドシート文字コード問題発生して文字化けしとる…。まあアプリ名だけなのでいいとしましょう。
Excelで見ると大丈夫だけど数らしきところがオーバーフロー、スプレッドシートで見ると文字化けするけど数はOK。
どうやら、数の二か所と最後の長ったらしいやつが違うっぽいですね
これ共通化したら私の日記、帰ってこない??というわけで思い立ったらやってみよう。怒られたら素直に謝ろう。というか私これ自分のとこからとったんですけどなんで変わるのこの鬼畜!!私のデータ返して!!

「APKファイル内のメタデータを置き換える」

ではまずAPKファイルを探します。今まで見てたのバックアップのやつだから探します。というか、まっさらな状態と比べて明らかにストレージ増えてんですよね…
せめて関係ファイルどれか分かるやつないかな?

という訳でやってみました。結果?聞かなくてもわかる気はするけどダメでした。
まずそもそもアクセス権がない(うちの子root化してないんですよ)
ということで別の手段を取るべく思考Time。

APKを解析してみよう

そもそもAndroidにかかわらずたいていのアプリケーションは大部分をAPKつまりインストールするアプリケーションファイル/フォルダに格納しています。つまりこれ見れたらたいていのことわかるよね?見れたら。
ということで、PC使えば普通に見れるやんって話(APKは署名付きZIPなので)なのですがぶっちゃけ本日これ書いてるのでいちいちPCで見たくないし何より環境整えるの面倒なんですよ。なぜなら三月頭にMBPが届くんですけど今のに入れたくないやつとかもろもろそっちに入れる予定なんです。よってこいつで環境整えたくねえ。
なのでそんなときの味方、スマホで簡単APK解析!Show Javaちゃん
play.google.com
はい、便利グッズ!
たまにしか使わないけど暇つぶしにはもってこい、Show Javaちゃんです。
現在インストール済みのアプリケーションのからも選択可能、SDカードからだって選択できちゃいます。便利便利。デコンパイルしてくれる子です。
えーっと今回は
f:id:Clairdeluna_eve:20190227223423j:plain
一番上。で、成功したんですけど。やっぱ見てもデータなさげなんですよね…。
ちなみに判断理由は、増えていたデータ量がおおよそ5MBだったのに対してそのサイズのデータが存在しなかったこと。もしちゃんとjava読めたらわかるのかもしれません。
一度だけ高校の時にアプリ作ってますけど、残念なことに自分の管轄のとこしか存じ上げないんで詳しいことは知りませんから正確にこうだ!とは言えませんけどね。
うーん、だめか。ということでどんどん手動引継ぎが近くなってきました…

パケット見てみよう

最後のあがき。もしこれでだめだったらもうあきらめるしかない。
でこれもPC使う?は?ないわーという個人事情によってスマフォーで完結することに。
そんなときの味k(ry
名前そのままPacket Captureちゃん!
play.google.com
入れてなんやかんやしたらアプリごとにキャプチャできるから便利よ!
というわけで見てみました。
そうしたらめっちゃ広告堕ちてきてるのはどうでもいいんだけど、私ネットワーク専門じゃないしよくわからんな!ということで広告と接続ok?とかその辺を除くと初回で落ちてくるらしい背景だの何だの。というか広告しか落ちてきてなくね???と思わなくもないんだけどそろそろ眠い。というか明らかに広告ばっかじゃん。

時間切れ…むりだったにゃん。次は殺す

じゃあどう考えても中にいるでしょ!どこよお前!ということがわかりました。収穫ですね。
ただ問題が一つ。めっちゃ重要な奴。これ、探しきるのにどのくらいかかるんでしょう?たぶんroot権限いりますよね?ユーザーじゃ移動できない参照権限のないファイルでしょうし。そうじゃなかったら全部見たしあるだろ。ということで今回制限時間があるんですよ。
なんせauに古い端末返却しなくてはいけませんから。
ということで地獄の手動コピー、はっじまっるよぉ★
送信方法は様々ですがもう二年間書いているので量がやばいし何がいいですかね。
今回はLINE引継ぎ前に終わらせたかったのでwifi Direct使って送信しました。
じっごくぅ

次引き継ぐときは意地でも探し出して楽に引き継ぎます。
もしくはこれ用に勝手に引継ぎツール作ってやります。

PHPの環境をポータブル化

PHPカンファレンス2018に参加することになったとき、よく考えなくてもPHPめっちゃ前に入門の本をやったくらいしか記憶になく。
んで、友人と話しててなんやかんやでポータブル化することになったので手順まとめ。複数の環境あるっぽいのでとりあえずやってみよう的なノリです。
ちなみに今回は「PHPだけ入れてPATHを通す」っていう簡易的な環境構築。

これに関しては参考にしたサイトがこちら
jyn.jp

本当にわかりやすいし感謝しかない。あがめよ。彼の人が神だ。
で、どうせなら環境同時に開けるようにしようぜ的なノリでphp.batを書いた。

@echo off
set PHP=%~dp0

rem Display choices
echo PHP version
echo [1]5.6
echo [2]7.0
echo [3]7.1
echo [4]7.2
echo [5]7.3
echo [6]PHP site
echo [7]exit
echo.

rem Select
choice /c 123456 /t 120 /d 6 /n /m ">"

rem processing
if %ERRORLEVEL% equ 7 (
exit
)else if %ERRORLEVEL% equ 6 (
start https://windows.php.net/download/
exit
)else if %ERRORLEVEL% equ 5 (
set version=7.3
)else if %ERRORLEVEL% equ 4 (
set version=7.2
)else if %ERRORLEVEL% equ 3 (
set version=7.1
)else if %ERRORLEVEL% equ 2 (
set version=7.0
)else if %ERRORLEVEL% equ 1 (
set version=5.6
)
rem add path location
set PATH_PHP=%PHP%%version%

rem add path and start cmd
set path=%PATH_PHP%;%PATH%
cd %~dp0
start cmd

この辺の細かい作り方とかについてはそのうちまとめてこっちにリンク貼る、はず。
処理的にはバッチファイルを起動すると「PHPのバージョンを選択してください」的な奴が出てくる。そこで今入ってる5.6系、7.0系、7.1系、7.2系、7.3系を選択して入力するとコマンドプロンプト(cmd)が起動する。
cmdは環境変数として選択したバージョンにPATHが通っている状態で立ち上がる。
ちなみに一つだけとかにしていないからいくつでも同時に立ち上げられる。
バージョンが増えたときは普通に追加していけば全部使えるようになるしいいんじゃないかな?

ちなみにですがPATHに関するやつ書くのにめっちゃ時間かかって年が明けました☆
clairdeluna-eve.hatenablog.com

「PATH」って何?

さて、PHPの環境のポータブル化についてまとめるにあたって、参考にさせていただいたサイトで「PATHわかんない人は調べてね」的な奴がありまして。
そういや、細かいこと知らねえぞ?と思い調べてまとめることにいたしやした。
例にもれず今回もapple?聞いたことないですねぇという勢いでいきます。
MacPC買ったらカテゴリ分けしようかな。そのうちMacのも書くよ(たぶん)

ざっくりと

ファイルシステムの住所のこと。USERPROFIREのところでも書いた「C:\User\」などがこれに当たります。目的のファイルまでの道のりみたいな認識でOK。
正確な言い方だと「ファイルシステムで特定の資源を示す文字列」のことかな。

ファイルシステムって何?

雑に言えば、「データを管理・整理し、保存・出力する機能」のこと。これも種類がいろいろあるけど、身近なところだとUSBフラッシュメモリを初めて使う時とか、TV番組をBDとかDVDとかに書き込むときに「フォーマットしてください」みたいな警告が出ますよね?「フォーマットする」ことによってファイルシステムが書き込まれて、よく見る挙動をするようになるんです。
まあ、詳しくその内ですがまとめるでしょう。その時はどっかこの辺にリンク張っておきます。

表記方法

ファイルシステムでは二つ、表記方法があります。現在地から目的地までのPATHとrootフォルダ(一番上の決まった位置)から目的地までのPATHです。
現在地から目的地までを「相対パス」、rootから目的地までを「絶対パス」と呼びます。rootからファイルまでのパス(メモ帳の「C:\Windows\System32\notepad.exe」みたいなやつ)を「フルパス」って呼んだり。

「PATHを通す」とは?

WindowsにPATHを記憶させて、特定のプログラム(アプリケーション)をプログラム名だけで実行できるようにする」こと。もしくは、その「PATHを記憶させる行為」のことを指します。
方法はいくつかあるけど代表的なものは
・コントロールパネル上で編集する
コマンドプロンプト
・なんらかのツールを使用する

ではまず「コントロールパネル上で編集する」やり方。
コントロールパネルは見てわかる通りここから開ける。(Win10使ってる前提)
f:id:Clairdeluna_eve:20190203004447p:plain
あとはWin+Sで「コントロールパネル」って検索するとか。
ちゃんとしたキーボード使ってる人はWin+Pause/Breakキーがショートカットだったはず。このキーはラップトップ(ノートPC)だと省略してあることが多いから気をつけてな。
んで、開けたら「システム」→「システムの詳細設定」→「環境変数」ってすると新しいウィンドウが開くので、そこのユーザーの環境変数の中にある「Path」に追加するとPATHが通る。

次はコマンドプロンプトだけどWin+Rで「cmd」ってすれば開ける。クリックで開くときはコントロールパネルと同じとこにある。
ここで、用途によってコマンドが変わる。一時的に使いたいときは「set」、ずっと使う時は「path」。で、もういっこ「setx」。これは本当に非推奨だけど使う可能性がゼロじゃないから。

まず「set」これは

$ set PATH=%PATH%;(通したいpath)

って書く。この有効範囲は「今開いているシェル/コマンドプロンプト、プログラム」と「そこから開いたシェル/コマンドプロンプト、プログラム」。最悪ミスってもウィンドウ閉じたら元通りっていう、本当に一時的に使う用のやつ。

次に「path」これは

$ path %PATH%;(通したいpath)

こっちは完全に追記。環境変数のところにちゃんと載るから一時的じゃなくて永続?かな。

で、問題の「setx」

$ setx PATH=%PATH%;(通したいpath)

が構文。前の二つはユーザーの(言い換えればローカルの)環境変数を変更するものだけどこれはグローバル、というのかな。ミスったら(デフォルト設定の部分とかまで消したら)今起動してるWindowsの挙動がやばいことになったりする。やったことはない。でも、コマンドでグローバル変更したかったら使うしかないからめっちゃ気を付けてやるんよ?ついでに言うと確かリモートコンピュータの環境変数とか設定とかいじれたと思う。

全部に共通して「%PATH%」って書いてるから何ぞこれ?と思うかもしれないけど、これは現在のPATHが全部入った変数で、上のコマンドは環境変数に「通したいpath」を追加してることになってる。ちなみに忘れると追加したやつ以外何もできなくなるよ。dir実行しても「そんなのねぇぞ?」って言われるの恐怖だかんな。

ツールは使ったことないから知らん。
「path ツール」とかで検索すれば出るんじゃね?

「PATH」の場所

んで、ここからはちょーっと詳しい説明。「わかんね☆」という人は飛ばそう。

ここまでで把握しているかもしれないけどPATHは環境変数です。レジストリのやつの最後にレジストリエディタの画像を載せているけど、そこでも編集できるよ。で、PATHに対応しているレジストリ
・HKEY_CURRENT_USER\Environment
・HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment
の二つ。勘のいいひとなら気づくと思うけど、上がログインしているユーザーだけのPATHで、下のが全体のPATHだね。
長く使っている人だと「どっちにも書いていないプログラムでも起動できるぞ?」と疑問に思うかも?そう、ここだけじゃない。
・HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\App Paths
・HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths
この二か所にも。まあPATH見て気づく通りアプリケーションソフトのPATHが入っているんですけどね。Chromeとか入れたときに「Win+Rで実行できるのに環境変数のとこに書いてないよ?!なんで?」とか思う人少ないと思うけど。

このあたりがわかると今度はAutoRun(起動時に自動実行)とかしたいなんて思う人いると思いますがそこは自分で調べてね☆
説明面倒とか言えない

「PATH」の仕組み

とりあえず、なんでプログラム/アプリケーション名で実行できるかっていう話。
端的に言うと総当たりの脳筋しぐさで実現してる。それであの速度。さすがコンピュータ。とりあえずメモ帳「notepad.exe」を例にして言うと

PATH=C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;C:\WINDOWS\System32\OpenSSH\

が与えられたとき

「C:\WINDOWS\system32\notepad.exeってある?」
「C:\WINDOWS\notepad.exeってある?」
「C:\WINDOWS\System32\Wbem\notepad.exeってある?」
「C:\WINDOWS\System32\WindowsPowerShell\v1.0\notepad.exeってある?」
「C:\WINDOWS\System32\OpenSSH\notepad.exeってある?」
という風に総当たりしていく。最初に見つけたところのnotepad.exeを開いて終了。
これの問題点が一つ。実行ファイル名が被ったらはじめの一つだけが開くようになる。

改造したnotepad.exeをnotepad.exeとして保存したら?改造したメモ帳のpathを改造元より前に置けば改造元は開かないし、あとに置けば改造メモ帳は開かない。


なんとなく使ってる人で引っかかりを感じてる人、いるかもしれない。例えば「notepad.exeってしなくてもnotepadで開くよね?」そう、その通り。
それは拡張子を補っていく「PATHEXT」という環境変数があるから。ちなみにこっちも脳筋しぐさ。計算機ってスゴイナァ
つまりフォルダパスはPATHが、拡張子はPATHEXTが脳筋しぐさで補うことでメモ帳は「notepad」で実行できる、ってわけ。

これ、どこにPATH通ってるの?という疑問に答えるコマンドもあります。

$ where notepad.exe

とすればnotepad.exeがどこにあるのかすぐわかるっていう「where」コマンド。
そのままじゃん、って?わかる、私もそう思う。


というわけで長くなったけどここで終了。なんか見つかったら随時追記していこうかなと思ってるけど、いったいいつになるだろうね?