texファイルをgitで管理する

背景

研究で文章を書く際にはtexを使うことが多いと思います。 毎日texの文章を変更し続けていると、以前何を書き換えたのか忘れてしまったり、昔の状態に戻したいと思ったりすることが多々あります。そのときのために、逐一texファイルをそのままバックアップして管理するのは、ディスク容量的にもあまりよろしくありません。

そこで、gitを使って、ファイルの差分を管理することで、そのような自体にうまく対応してやろうというのが今回のねらいです。 gitで管理しておくと、任意のコミットの時点に一瞬でファイルを復元できますし、バックアップのファイル容量も抑えられます。 同じ名前のファイルが複数作られることもないので、ディレクトリの管理も非常にシンプルになります。

一般的には、gitというと、GitHubやBitbucketなどのサービスを使って複数人での共同開発を円滑に進めるためのものというふうに考えると思います。 このとき、リモートリポジトリとして、外部のサーバにファイルをアップロードしなければならないため、最新の研究に関する論文などはアップロードするべきではないかもしれません。 一番いい方法は、研究室内のサーバにGitLabなどを使ってgitのリモートリポジトリを作ってしまうことですが、やり方がわからないという場合は、gitのローカルリポジトリのみ使うという方法も考えられます。 もちろん、複数人でtexファイルを変更するときは困りますが、基本的に自分一人で書き換えるので大丈夫です。

今回は、texをgitで管理するための使い方を紹介するというのが目標です。

texのdiffをとる

ちなみに、latexdiffというツールが存在して、これを使うと2つのtexファイルの差分をPDFとして見ることができます。 なので、今日変更を加えた最新バージョンと、昨日のバージョンのdiffをPDFで表示させることもできます。 このとき、今ローカルにあるtexファイルと、あるブランチにおけるtexファイルに対してlatexdiffを行わなければいけません。 そのため、少し複雑なことをしなければなりませんが、shell scriptを書いたので、それを使うと簡単にdiffのPDFを作ることができます。

これで毎日、どこを書き換えたのかすぐに出すことができるので、進捗報告が相当楽になります。

texのためのgit

gitに関して、すごくわかりやすい説明のwebページはたくさんあるので、まずはそこを見てください。 例えば以下のリンクが参考になります。今回はローカルリポジトリのみを使うということを想定しているので、 すべてを覚える必要はなく、とりあえず以下のものだけ使えるようになれば十分です。

backlog.com

覚えておきたいgitの用語

  • add
  • commit
  • branch
  • checkout
  • merge

望ましいgit Flow

さて、gitの基本的なイメージが掴めたら、どのように作業をするべきかについて説明します。

github.com

の中身をcloneもしくはダウンロードしてください。 このリポジトリの中には、texのための.gitignoreとlatexdiffするときのshell scriptが入ってます。 このダウンロードしたディレクトリの中で, texファイルを編集することにします。

masterブランチは、最新の状態が維持されるように管理します。 そして、ブランチ名は日付にしておくのがベターかと思います。 基本的な流れとしては、一日が始まったら、その日の名前のブランチを作成し、作業をしたら適宜コミットして、最後にmasterブランチとマージして帰宅するというのがおすすめです。 例えばtest.texという名前のファイルを管理するのならば、以下のような流れでコマンドを入力していけばよいです。

git checkout -b "today"
------test.texを編集する---------
git add test.tex
git commit -m "comment"
------test.texを編集する---------
git add test.tex
git commit -m "Revise Finished"
git checkout master
git merge "today"

1日1コミットしかしないのではなく、キリがいいときに、適宜コミットしておく癖をつけておくと良いです。 最後に、masterブランチをマージする前に、今日の成果のdiffをlatexdiffを用いて作る方法を紹介します。

masterブランチのファイルとlatexdiffする

現在のローカルにあるfilename.texと、masterブランチ時点でのfilename.texのlatexdiffをとるためには、以下を実行します。

./make_diff.sh filename.tex

これで、diffディレクトリの下に、diff.texという名前のファイルが生成されるので、そのtexファイルからpdfを作れば終わりです。 ちなみに、中でやっていることはそんなに難しくありません。

git show master:fiilename.tex

とすると、masterブランチのfilename.texの中身を見ることができるので、リダイレクトして、一度ファイルを生成してから現在のブランチのファイルとdiffをとったあと消すということをやってます。それだけです。 ただ、毎回同じことを書くのは時間の無駄なので、このようにshell scriptを書くことで、一行で実行できます。 もし、よかったら使ってやってください。僕も数週間試してみていますが、いい感じです。 みんなtexもgitで管理するべき。

Youtube-Multi-Player

Youtubeで複数動画を同時再生できる何か

なんでつくったか

ドラムが趣味で、叩いてみた動画を作るも、著作権の関係で背景に音楽載せて公開したらアウトっぽいことが判明。

youtube, ニコニコ動画の場合演奏動画をupするのはセーフ (twitterはアウト?)

全部自分たちで演奏するのはセーフ、CD音源やPV動画を流したらアウトらしい。

そこで、自分の中でyoutube同時再生なら大丈夫そうとの結論がでた。

 

製作期間

今年のGWの何日かを使って作った。

僕はWeb開発のバックエンドしか触ったことなくて、フロントはさっぱりわからんので最低限の機能を備えたデザイン性皆無のものしかできあがらなかった。

github.com

 

使い方

  1. ./src/multiplayer.htmlをダウンロードしてブラウザで開くf:id:mash810r:20180514225632p:plain
  2. https://www.youtube.com/watch?v="ほげほげ"の動画を再生したいなら, Video IDにほげほげと入力
  3. add video listボタンを押したら入力欄が増えます
  4. start timeに値を入れると任意の開始時間が選べます
  5. 追加が終わったらgenerateボタンで動画が再生されます

 

Option:一度追加が終わったら、JSON dataが生成されるので、次回からはJSON dataに生成された文字列をコピペして、load JSONすれば動画が再生されます。

play, pause, resetボタンはすべての動画に対して、play, pause, resetの命令を行う。

もし、タイミングが悪かったら、pause、reset、playを繰り返してみてください。

 

JSON dataに

[{"yid":"n7MyoBki9wk","start":"0.1"},{"yid":"rH9tkCuz7vg","start":"0.6"}]

と入力してみると、僕の叩いてみた動画と原曲が再生されるので、よかったらどうぞ。(まだまだ下手くそなのでもっと練習します。)

以下のものは、自分があたかもバンド演奏できているみたいでニヤニヤできます。

[{"yid":"nBgbzRRxBAI","start":"0.11"},{"yid":"rH9tkCuz7vg","start":"0.6"},{"yid":"9lXnmUOz7aA","start":"0.1"},{"yid":"l78zlPngMFs","start":"0.1"}]

 

他にも、いろんな演奏してみたと同時再生してみて、勝手にバンドを編成するみたいな楽しみ方もできそうです。 

ひとりごと

動的なwebページを公開する一番簡単な方法ってなんなんですかね。

github webpagesを使ったらhtml公開できることを知ったのですが、どうやら静的なページのみらしいので。。。

 

追記(2018-06-05)

Github Pagesだと静的なページしか見れないとの情報を見たので、諦めていたのですが、http経由でjqueryをimportするのではなく、直接ファイルから読み込むようにすれば、Github Pages上でも動的なページを公開することができました。

以下のリンクから、Github Pagesが見れます。 JSON data 内に[{"yid":"nBgbzRRxBAI","start":"0.11"},{"yid":"rH9tkCuz7vg","start":"0.6"},{"yid":"9lXnmUOz7aA","start":"0.1"},{"yid":"l78zlPngMFs","start":"0.1"}]

と入力すると、ちゃんと複数動画再生されました。めでたしめでたし。(次はデザインをこだわりたいところ。)

https://mash810r.github.io/youtube-multi-player/src/multiplayer.html