拡張子を自作する方法|ファイル形式の設計からOS登録まで完全解説

プログラミング・IT

自分だけの拡張子を作ってみたい、アプリと専用ファイル形式を紐づけたいと思ったことはありませんか?
実は拡張子を「作る」こと自体はとても簡単で、ファイル名の後ろに好きな文字列をつけるだけで実現できます。
ただし「本当に役立つ自作拡張子」にするには、ファイルフォーマットの設計・OSへの登録・プログラムでの読み書き実装という3ステップが必要です。
この記事では、その全体像をわかりやすく解説します。

スポンサーリンク

拡張子の基本をおさらい

まず前提として、拡張子の役割を確認しておきましょう。
拡張子(かくちょうし)とは、ファイル名の末尾にある . 以降の文字列のことです。
document.txt なら txtphoto.jpg なら jpg が拡張子にあたります。
OSはこの文字列を見て「どのアプリで開くか」を判断し、適切なアイコンを表示します。

重要なポイントは、拡張子はファイルの中身を直接変えるわけではないという点です。
.txt.xyz に書き換えても、ファイル内のデータはまったく変わりません。
変わるのはOSの「開き方の判断」だけです。

拡張子についてもっと基礎から知りたい方はファイル拡張子完全一覧もあわせてご覧ください。
また、Windowsで拡張子を表示する方法を確認したい方はWindows拡張子を表示する方法が参考になります。

自作拡張子の「3つのレベル」

自作拡張子には、目的によって3つのレベルがあります。
どのレベルを目指すかで、必要な作業がまったく異なります。

レベル内容難易度
レベル1:名前だけ変えるファイル名の拡張子部分を書き換えるだけ★☆☆
レベル2:OSに登録する独自拡張子をダブルクリックで特定アプリが開くようにする★★☆
レベル3:専用フォーマットを設計するファイル内部の構造も独自に定義する★★★

趣味でマインクラフトのMOD用ファイル(.mcmeta など)を作りたいだけならレベル1で十分です。
自作アプリ専用のファイル形式を実現したいなら、レベル2〜3まで対応する必要があります。

レベル1:ファイル名の拡張子を書き換える

最も手軽な方法です。
Windowsでは、まずエクスプローラーを開き、「表示」メニューから「表示」→「ファイル名拡張子」を選択します(Windows 10では「表示」タブの「ファイル名拡張子」チェックボックスから操作します)。
その後、ファイルを右クリック→「名前の変更」で、拡張子部分を好きな文字列に書き換えるだけです。

例:mydata.txt → mydata.choge

この状態では、ファイルを開こうとするとOSが「どのアプリで開きますか?」と尋ねてきます。
中身はテキストファイルのままなので、メモ帳などで開くと内容を読めます。

ただし、これだけでは「自作アプリ専用のファイル」にはなりません。
ユーザーがメモ帳で開いて中身を見たり書き換えたりすることもできてしまいます。

レベル2:OSに関連付けを登録する

独自拡張子のファイルをダブルクリックしたとき、自作アプリが自動的に起動するようにするには、OSへの関連付け登録が必要です。

Windowsへの登録方法

Windowsでの関連付けはレジストリ(Windows Registry、Windowsの設定データベース)を操作して実現します。
レジストリの編集は誤操作するとOSに重大な影響を及ぼすため、必ずバックアップを取ってから行ってください。

登録の基本構造は以下のとおりです。

  1. 拡張子キーを作成する
    HKEY_LOCAL_MACHINE\SOFTWARE\Classes\.自作拡張子 というキーを作成し、ProgID(アプリ識別子)を値として設定します。
  2. ProgIDキーとコマンドを登録する
    HKEY_LOCAL_MACHINE\SOFTWARE\Classes\ProgID\shell\open\command にアプリの実行パスを設定します。

レジストリファイル(.reg)を使った一括設定の例は以下のとおりです。

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\.choge]
@="MyApp.Document.1"

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\MyApp.Document.1]
@="MyApp Document"

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\MyApp.Document.1\shell\open\command]
@="\"C:\\MyApp\\myapp.exe\" \"%1\""

上記を .reg ファイルとして保存し、ダブルクリックして適用すると、.choge 拡張子のファイルをダブルクリックしたときに myapp.exe が起動するようになります。

なお、Microsoftの公式ガイドラインでは、ProgIDにはバージョン管理された形式(例:MyApp.Document.1)を使うことが推奨されています。
これにより、アプリのバージョンアップ時に拡張子の競合を防げます(Microsoft Learn「ファイルの関連付けのベスト プラクティス」)。

アイコンの設定も同様にレジストリで行えます。
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\MyApp.Document.1\DefaultIcon にアイコンファイルのパスを指定してください。

macOSへの登録方法

macOSでは、アプリの Info.plist に以下の2つを記述します。

  • UTExportedTypeDeclarations:アプリが定義するファイルタイプ(UTI)の宣言
  • CFBundleDocumentTypes:アプリが処理できるファイルタイプの一覧

UTI(Uniform Type Identifier、統一型識別子)は com.yourcompany.yourapp.document のような逆ドメイン形式で定義します。

Linuxへの登録方法

Linuxのデスクトップ環境(GNOMEやKDEなど)では、以下の手順で登録します。

  1. カスタムMIMEタイプを /usr/share/mime/packages/ にXMLファイルとして追加
  2. .desktop ファイルの MimeType キーに対応するMIMEタイプを指定
  3. update-mime-database コマンドでデータベースを更新

レベル3:独自ファイルフォーマットを設計する

本格的な自作拡張子には、ファイルの内部構造(フォーマット)の設計が不可欠です。

ファイルフォーマットの2種類

ファイルフォーマットは大きく2種類に分けられます。

  • テキストベース:人間が読める形式。JSON、XML、CSVなど。実装が簡単で、デバッグしやすい。
  • バイナリベース:0と1のデータを直接格納する形式。ファイルサイズを小さくでき、構造の自由度が高い。

自作アプリ専用フォーマットとして手軽に始めるなら、テキストベース(JSON形式)がおすすめです。

{
  "version": 1,
  "appName": "MyApp",
  "data": {
    "title": "サンプル",
    "content": "ここにデータを格納"
  }
}

このデータを myfile.choge という名前で保存すれば、独自拡張子のファイルの完成です。

マジックナンバー(Magic Number)を設定する

バイナリフォーマットを設計する場合は、マジックナンバー(ファイル先頭に埋め込む識別バイト列)の設定を強くおすすめします。
マジックナンバーとは、ファイル形式を確実に識別するためにファイルの先頭バイトに埋め込む固定値のことです。

  • JPEG:FF D8 FF
  • PNG:89 50 4E 47 0D 0A 1A 0A
  • PDF:25 50 44 46(= %PDF

自作フォーマットでも同様に、ファイル先頭に固有のバイト列を設定することで「このファイルは本当に自作アプリ用か」を確認できます。

# Python での例
MAGIC = b"CHOGE\x01"  # 自作フォーマットの識別子

def save_file(path, data):
    with open(path, "wb") as f:
        f.write(MAGIC)
        # その後にデータを書き込む

def load_file(path):
    with open(path, "rb") as f:
        header = f.read(len(MAGIC))
        if header != MAGIC:
            raise ValueError("ファイル形式が正しくありません")
        # 残りのデータを読み込む

拡張子の文字列に関するルール

自作拡張子の名前を決める際は、以下の点に注意してください。

  • 既存の拡張子と被らないことが最重要(ファイル拡張子完全一覧で確認できます)
  • Microsoftは短い拡張子を避けることを推奨しています。短いと既存の拡張子と競合しやすいためです(Microsoft Learnより
  • 半角英数字を使い、特殊文字は避ける

MIME typeとIANA登録について

自作フォーマットをインターネット上で配布したり、Webアプリで使用したりする場合は、MIMEタイプ(メディアタイプ)の設定も考える必要があります。
MIMEタイプ(Multipurpose Internet Mail Extensions type)とは、ファイルの種類をインターネット上で識別するための識別子です。
形式は タイプ/サブタイプ で、たとえば text/htmlapplication/pdf のように表記します。

自作フォーマットに付けるMIMEタイプは以下のような命名が一般的です。

  • ベンダー固有application/vnd.yourcompany.yourformat(IANA登録推奨)
  • 個人・実験的用途application/prs.yourformat(個人ツリー)
  • ローカル・非公開用途のみapplication/x-yourformatx- プレフィックス)

なお、x- プレフィックスは古くから広く使われてきた慣習ですが、RFC 6838(2013年)以降は新規に命名する型への使用が非推奨となっています。インターネット上で配布・公開するフォーマットには vnd. または prs. ツリーの利用を検討してください。

公開フォーマットとしてIANA(Internet Assigned Numbers Authority、インターネット番号割り当て機関)に正式登録することも可能です。
登録費用は無料で、登録することで他の開発者との互換性が確保されやすくなります(IANA MIMEタイプ公式サイト)。

自作拡張子に関するよくある誤解

「自作拡張子にすればユーザーがファイルを開けなくなる」は誤り

自作拡張子にするだけでは、ファイルの中身を保護できません。
メモ帳やバイナリエディタを使えば、拡張子にかかわらずファイルの内容を読むことができます。
ファイルの内容を保護したい場合は、拡張子の変更とは別に暗号化を実装する必要があります。

「拡張子を変えればファイル形式も変わる」は誤り

.jpg.png に書き換えても、ファイルの内部データはJPEG形式のままです。
見た目(アイコンやOSの判断)が変わるだけで、中身は変わりません。

アプリインストーラで自動登録するのがベストプラクティス

手動でレジストリを編集する方法はトラブルが起きやすいため、実際のアプリ開発ではインストーラにOSへの関連付け登録処理を組み込むのが標準的なやり方です。
Visual Studioなどの開発環境では、セットアッププロジェクトにファイルタイプの設定画面が用意されています。

アプリのファイル構造について詳しく知りたい方はdllファイルとは?INIファイルとは?も参考になります。

まとめ

今回は、拡張子を自作する方法を3つのレベルに分けて解説しました。

  • ファイル名を書き換えるだけなら誰でもすぐできる(レベル1)
  • ダブルクリックで自作アプリを起動させるにはOSへの関連付け登録が必要(レベル2)
  • 本格的な専用フォーマットには内部構造の設計とマジックナンバーの実装が重要(レベル3)

まずはシンプルなテキストベース(JSON形式)のフォーマットと関連付け登録から始めるのがおすすめです。
拡張子の基礎知識を固めたい方はファイル拡張子完全一覧もあわせてご覧ください。


参考情報源:

コメント

タイトルとURLをコピーしました