1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

FastaとFaiの含まれたGitリポジトリをWindowsにチェックアウトすると、改行コードの関係でインデックスがずれる

Last updated at Posted at 2022-09-04

タイトルの通りです。

Fastaは、塩基配列やアミノ酸配列の形式です。リファレンスゲノムの表現によく利用されます。FastaはSamtoolsやSeqkitなどのコマンドラインツールを利用してインデックスファイル .fai を作成することができます。インデックスファイルの中身はとても単純で、参照配列の名前、長さ、オフセット、ラインベース、改行を含む各行のバイト数、などが規定されています。

昨日、自作のライブラリruby-htslib をWindowsに対応させました。
その際、ほとんどのテストは通ったのですが、Faidxのテストが通りませんでした。

その原因は、WindowsではデフォルトでGitが自動的に改行コードを変換する仕組みがあって、Fastaの改行コードがLFからCRLFに変換されたため、オフセットや改行を含むバイト数が、変換後のFastaファイルと不整合になっていたというのが原因でした。WindowsとMac/Linux間の改行コードの自動変換はいろいろなケースで問題になるようで、QiitaにはどのようにGitを設定を設定するべきかについて考察した記事もあります。

改行コードの長さが異なるので、同じFastaファイルであっても、① Mac/Linux上で samtools faidx した場合と、② Windows上で samtools faidex した場合は内容の異なるファイルが作成されます。逆に言うと、Mac/Linux上で作成したインデックスファイルは、GitでチェックアウトされたWindows上のFASTAファイルには適応できません。

この問題を解決する方法として、毎回新しくインデックスファイルを作り直すということも考えましたが、それよりもむしろFASTAファイルの改行コードを決め打ちした方がよいだろうと考えました。実は .gitattribute というファイルを作成すると、ファイルの拡張子単位で改行コードを指定することができます。

.gitattribute
*           text=auto
*.fa        text eol=lf

このようにしておけば、拡張子 .fa のファイルの改行コードは LF に強制されます。便利ですね。これで、Fastaの含まれたGitリポジトリをチェックアウトしてもインデックスとの不整合を起こさなくなりました。

この記事は以上です。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?