NRIネットコム社員が様々な視点で、日々の気づきやナレッジを発信するメディアです

注目のタグ

    「.gitconfig」などの「.」で始まるよく見るファイル名、実はこんな意味が!

    こんにちは。社会人1年目の福田です。
    突然ですが私は学生時代情報系を専攻していたので、

    「プログラムは多少できるしIT企業に入って仕事ができる人材として頑張るぞ~!」

    的な感じで弊社に入社しました。(もちろんちゃんとした志望理由はありますが、ここで話すと長くなってしまうので割愛。)
    約4ヶ月の研修を終え、配属されてから3ヶ月が経とうとしている今、「配属されてから、どう?」と聞かれて真っ先に頭に浮かんだのは

    開発環境構築むずっ

    でした。
    学生時代は自分のPCにOSバージョンを合わせて好きにツールを入れて、動けばOKだったのですが、社会人は当然違います。 会社のルールのもと、業務で使用するという責任をもって導入・管理をする必要があります。 自分の知識不足もありますが、会社のproxyや証明書問題で大変悩まされました…。

    必要なツールをひたすらダウンロード&設定する上で、UI上で設定変更ができるものもありましたが、ほとんどが設定ファイルに書き込む必要があるんですよね。 設定ファイルをひたすら探しているうちに「.gitconfig」というファイルにたどり着き、ふと思いました。

    「そういえば、「.」で始まるファイルっていったい何者?」

    「.gitconfig」は設定ファイルであることはわかったのですが、隠しファイルとされるファイルってなんで隠されているの?拡張子?と今更ながら疑問に思ったので、「.」で始まるファイルについて調べてまとめてみました。
    ※あくまでも初心者向けなので、コードの細かい書き方などは記載しません。


    そもそも隠しファイルって何?

    隠しファイルとは、こちらの記事で

    ストレージ(外部記憶装置)内に作成・保存されたファイルのうち、ファイルシステムなどの機能によって一覧に表示しないよう設定されたファイルのこと

    と定義されています。 e-words.jp

    「.gitconfig」や「.npmrc」などの「.」で始まるファイルはドットファイルと呼ばれ、UNIXにおいては隠しファイルの一種です。(太字の理由はこの後の補足で説明します。)

    以下によくあるドットファイルを5つ出してみました。

    .gitconfig Gitの設定ファイル。INI形式で書かれている。
    .npmrc npmの設定ファイル。INI形式で書かれている。
    .vimrc vimの設定ファイル。Vimスクリプトで書かれている。
    .bashrc bashの設定ファイル。シェルスクリプトで書かれている。
    .settings 主にmavenで使用される設定ファイル。XML形式で書かれている。

    まだまだ他にもたくさんありますが、今回はここまでで。

    なんでドットになったの?

    これはUNIXの歴史と関係があるようです。
    UNIXのファイルシステムの設計時、階層化する際に「.」や「..」が追加されました。 カレントディレクトリや親ディレクトリとして指定できるものです。
    しかしlsを入力した際に「.」や「..」で生成される階層ファイルが表示されると困るので、「.」で始まる全てのファイルを表示しないようにしました。
    ここであるプログラマーが気づきました。

    「「.」で始まるファイルは表示されないし、隠したいファイルは「.」で始めてしまえば良いんだ!」

    と。 これが隠しファイルという概念の始まりでした。
    そしてさらに、「隠せるならアクセスがしやすいホームディレクトリにいれちゃえ」というプログラマーが現れたことでホームディレクトリに隠しファイルを入れるようになりました。
    ホームディレクトリに大量のドットファイルがあるのはそういうことだったんですね。

    実際はこれにより動作が遅くなったり、ファイルが集中しすぎて管理が難しい等、問題視されていたようです…。

    詳しく知りたい方は、UNIXの開発に携わったRob Pikeのブログを見ていただければと思います。 コメント欄で当時のたくさんのプログラマーの方々が議論しているのを見ることができて楽しいですよ!

    なんで隠す必要があるの?

    前置きが長くなりましたが、本題に入ります。 このようなファイルはなぜ隠す必要があるのか?それは、

    ユーザが気軽に変更できないようにするため


    です。
    例えばGoogleで検索すると隠しファイルの表示方法が記載されていますが、作業完了後に非表示に戻すように注意書きがされています。 隠しファイルや隠しフォルダには、OSやアプリケーションに重大な影響を与えるファイルが含まれるため、 間違えてファイルを削除や変更をしてしまったり移動させてしまうと、正常に動作しなくなる可能性があります。 そのため隠しファイルと呼ばれるファイルの取り扱いには注意が必要です。

    このような理由を考えると、ホームディレクトリにドットファイルを置いて良いかよく考える必要がありそうですね。

    (補足)Windowsの隠しファイル、ドットファイルの扱いについて

    Windowsをお使いの方は薄々気づいている方がいらっしゃるかもしれませんが、実はWindowsではただのドットファイルは隠しファイルという扱いにはなりません。

    実際に以下の画像のように適当なファイルを作成して見ていこうと思います。

    .testfileというドットファイルとtest.txtというテキストファイルを用意しました。 中身は何も入っていません。
    この2つのファイルが入ったディレクトリ内を、Windowsで定番のdirコマンドでオプションを付けずに確認してみます。

    コマンドプロンプトの画面
    ドットファイルである.testfileはtest.txtと同じように表示されています。

    これをUNIXで定番のlsコマンドが使えるGit bashでオプションを付けずに見てみます。

    Git bashの画面
    ドットファイルは表示されず、隠しファイルの扱いになります。

    エクスプローラーに戻り、作成した.testfileのプロパティを開くと、下の方に「属性」という項目があります。 「属性」の隠しファイルにチェックを入れ、再度コマンドプロンプトで確認してみます。

    プロパティの画面

    コマンドプロンプトの画面2
    隠しファイルの属性を付与した.testfileは表示されなくなりました。

    つまりUNIXではドットファイルは隠しファイルとして扱われますが、Windowsではドットファイルというだけでは隠しファイルとして扱われません。 Windowsでは、ドットファイルであるかどうかではなく、隠しファイル属性が付与されているかどうかが決め手となっているのです。

    GitHubのdotfilesって知ってる?

    ところで、今回のブログを書く要因となった環境構築ですが、例えば同じチームなら、同じPCやOSで作業をしているのだから、何か良い方法ないかな~と調べていたところ、「dotfiles」というものを見つけました。 詳細な使い方は割愛しますが、一言でいうと、ドットファイルを他の人と共有できます。

    つまり、チーム内で設定を共有できるんです!!

    ただし、環境によって動作が変わるものは扱いにくかったり、認証情報が含まれるファイルは管理できない(というよりしてはいけない)というように制限は多少あります。
    私の環境構築で一番難関だったプロキシ設定は難しそうですね…。

    とはいえ、例えばチームで同じような作業をする際に、「この設定を追加しておくと便利だよー」みたいな時やPCを買い替える際にコマンドを1つか2つ入力するだけで設定の反映ができると考えれば、とても良い仕組みだと感じましたので今回ご紹介させていただきました。

    「dotfiles」に関する記事はたくさんあるので、気になった方はぜひ探してみてください。

    まとめ

    ドットファイルは普段とてもよく目にすると思いますが、隠されている理由や作られた経緯等、意外と知らないことがあったのではないでしょうか? 本ブログを作成するにあたり、自分でも勉強になる部分が多かったと感じます。
    今後の新入社員や将来自分がPCの入れ替えをするときのためにも、開発環境構築を楽にする方法はこれからも探していこうと思います。

    ここまで読んでくださった方々が少しでも「へー」とか「面白かった」と感じてくださっていたら嬉しいです。

    最後までお読みいただきありがとうございました!

    執筆者:福田江梨子 新人システムエンジニア
    好きなもの:音楽と鶏肉とコーヒー