Shoeisha Technology Media

CodeZine(コードジン)

特集ページ一覧

Pull Requestで日本語が文字化けしたときの対処方法

サポートエンジニアが解説するGitHub 第1回

  • LINEで送る
  • このエントリーをはてなブックマークに追加
2018/09/20 14:00

 この連載では、GitHubのサポートエンジニアが交代でGitHubについて一歩踏み込んだトピックを解説していきます。第1回の今回は、日本語などマルチバイト文字を使った場合に発生することがある文字化けについてお話します。

目次

はじめに

 皆さんこんにちは。GitHubの水谷と申します。GitHubでは、ビジネスサポートエンジニアという肩書きで企業向けサービスであるGitHub EnterpriseGitHub Business Cloudのお客様のテクニカルサポートをしています。

 GitHubはソースコード、コミットメッセージ、Issue/Pull Requestなど全ての機能においてマルチバイト文字に対応しています。しかし、特定の条件の下では意図せず文字化けが発生することがあります。この記事では文字化けが発生する条件、そのメカニズム、そして対策を解説します。

そもそもGitHubとは?

 連載の1回目なので、まずはGitHubについて簡単に紹介します。GitHubは、Gitを軸とした世界最大のソフトウェア開発プラットフォームです。しかし、これは一つの側面にしか過ぎません。GitHubでは自身を "GitHub is how people build software" と定義していますが、これはつまりGitHubが単純なコラボレーションツール(what/where)という枠を超えた、ソフトウェア開発の在り方そのもの(how)である、といった意図が込められています。

 GitHubは2008年に米サンフランシスコで創業されました。そのPull Requestと呼ばれる独特なコラボレーション機能が注目され、この10年で急成長を遂げました。2018年現在、GitHub.com上には2800万人のユーザが8500万ものリポジトリを保持しており、主要なオープンソースプロジェクトはほとんどGitHub上にあるため、ソフトウェア開発プラットフォームのデファクトスタンダードになっています。

 2015年6月には日本法人としてギットハブ・ジャパンを設立し、2016年には企業向けのGitHubであるGitHub Enterpriseのお客様へ日本語テクニカルサポートを開始しました。更に、2017年6月、2018年6月と2年続けて東京でGitHub主催のカンファレンスを開催し、日本語ブログも開設するなど、日本のコミュニティに向けた展開にも注力しています。

文字化けが発生する条件

 それでは今回のトピックに戻りましょう。文字化けが発生する対象はDiff画面(差分画面)です。Diff画面とは、例えばPull Requestを作成すると、変更されたファイルが一覧表示されますが、その画面のことです。あるいは同様に、各コミットのページにアクセスしても直前のコミットとの差分が一覧表示されます。このDiff画面において文字化けが発生するケースを見ていきます。

 このスクリーンショットは、lowply/garbled-diff-testというリポジトリに新しいファイルを追加した際の最初のコミットの画面の一部です。全てのコミット内容はコミットf074f92で確認できます。

最初のコミット画面
最初のコミット画面

 各ファイルは全て同じJavaScriptのソースコードで、日本語の文字列が含まれています。それぞれエンコーディング方式はShift_JIS、EUC-JP、UTF-8の3種類、拡張子は.js.srcの2種類の合計6ファイルです。ファイル名は「example-エンコーディング名.拡張子」というフォーマットにしています。

 お気づきのように、これらのファイルのうちexample-euc.srcとexample-sjis.srcの2ファイルが文字化けしているのがわかります。結論から言うと、下記の条件が揃った場合Diff画面で文字化けが発生します。

  1. マルチバイト文字が使われている
  2. エンコーディングがUTF-8ではない
  3. プログラミング言語が判定できない

 最近はエンコーディングにUTF-8が使われるケースがほとんどですし、GitHubで判定できない言語を使うことも少ないと思うので、これらの条件が全て揃うのは稀かもしれません。ですが、Windowsで作られたシステムなどではまだCP932を使用している例もあるのではないでしょうか。あるいは、特定のシステム向けに独自の拡張子を使っていて、使用できるエンコーディングが指定されている場合などは、かなり高い確率でこの条件に当てはまるでしょう。

 なお、example-sjis.srcをファイルビューで表示しても、このように文字化けは発生していません。発生するのはDiff画面のみなのです。

ファイルビューでの表示
ファイルビューでの表示

  • LINEで送る
  • このエントリーをはてなブックマークに追加

著者プロフィール

  • 水谷 翔(GitHub, Inc.)(ミズタニ ショウ)

     東京都生まれ。工学部建築学科出身。ウェブデザイナー、インフラエンジニア、AWSのデータセンターテクニシャン等のキャリアを経て2016年6月にGitHub, Inc.に入社。Business Support Engineerとして、GitHubの企業向け製品GitHub EnterpriseやGit...

All contents copyright © 2005-2018 Shoeisha Co., Ltd. All rights reserved. ver.1.5