HierarchyDoxygenを使って出力した図Bottleは1ファイルながら中でそれぞれのクラス、主にServer、Templateが継承関係にあるのがわかる(コード量は4000行位)。World'起動処理を確認するコマンドラインインターフェースを使う場合mainが2箇所あるが、これはサーバアダプダに必要なライブラリを必要としているからで、1つ目のmainでまずサーバアダプタに必要なライブラリを読み込み2つ目のmainでサーバが起動される仕組みになっているrun()でサーバを起動するrun()では、渡された引数の値をそれぞれ読み込んだあと最後にServerAdapterのrun()を呼び出している。Bottleでは多くのサーバをServerAdapterを継承することでサポートしており、指定されたサーバを起動するようになっている。指定しない場合はwsgirefがデフォルトで呼ばれる。appパラメータは特別指定しなければ、内部で自動的にdefaultが使われるので特別指定する必要はない。サーバをロードするまで処理を追ってみるまず、Bottleでサポートしているサーバは以下のように宣言してある。AutoServer,}サーバを指定するには、run()実行時にserverとして必要な値を文字列で指定して渡す。以下に記載の通りデフォルトでは’wsgiref’が指定されている。server.run(app)簡単に起動までの流れをおってみたが、細かく見てみると他にも起動オプションがあるので必要に応じて設定するとよいざっと見てみたところBottleは1ファイルで構成されているので中身を確認しやすくPython初級者の私にとってはとっつきやすいフレームワークに思う。起動自体も1ファイルだけでできるので開発も簡単に始められる。その分逆にどのようにアプリケーションとしてファイルを構成していけばいいかが分かりにくいというデメリットもあるのではと感じた。最終的には自分なりに構成していけばいいのだがその辺はまた追って確認していこうと思う。taisa831GitのソースコードをデバッグするこれまでGitの内側の仕組みなどをチェックしてきて、最近ようやくソースコードをデバッグしてみても処理が追えそうというところまできたので記事にまとめておきます。試しながらやった結果なので、もっとよいやり方はあるかもしれません。emacsとgdbをインストール今回OSはCentOSを使っていきます。gdbgitのソースコードをクローンする今回はGitHubにあるソースコードを利用します。バージョンを指定してチェックアウトしておきます。v2.6.0-rc1ソースコードをコンパイルするまず必要なライブラリをインストールしてからコンパイルします。perl-ExtUtils-MakeMakermakeemacsを起動してデバッグをする環境が整ったので、ここからgdbを起動しgitコマンドのデバッグをしていきます。gdbはそのまま起動しても使えますが、emacsからの方がデバッグしやすいのでemacsからgdbを起動します。rデバッガが起動しました。画面上側がコマンドラインで、下側がソースになっています。表示されて終了します。exit(1);まとめ普段開発ではIntelliJを利用しているのでCLionでもできないかと色々試してみましたが、そもそもMacでコンパイルを通すこともできず断念しました。おかげでLinux環境でもなんとかやっていけそうなので、このままコードリーディングを進めてみようと思います。HEADとheadsとtagsとremotesGitの参照についてまとめました。別記事にてGitの内側について記載しています。init」すると「.git」ディレクトリができるがその中についてがテーマ普段は使わない配管コマンドと呼ばれる下位レベルのコマンドがある4つのオブジェクトがあるblobオブジェクト(ファイルに相当)treeオブジェクト(ディレクトリに相当)commitオブジェクト(commit情報を保持)tagオブジェクト(Tagを保持)Gitの参照って?ここで取り上げるGitの参照は「HEAD」ファイルと「.git/refs」配下のことを示します。init」した直後「HEAD」ファイルは「refs/heads/master」を参照し(初期化直後はなにも存在しない)、「.git/refs」配下には、headsとtagsディレクトリがあります。ブランチにcommitするとheads配下にブランチ名のファイルができ、HEADファイルはheads配下のブランチ名を参照します。tagsGitの参照の種類Gitの参照の種類は次の通りです。heads:作業中ブランチのcommitを参照tags:commitをわかりやすくする為の名前付け用remotes:リモートブランチのcommitを参照HEAD:作業中のブランチに対するシンボリック参照。次のような3つのcommitがあるリポジトリを用意しremoteへpushしておきます。git@github.com:taisa007/internal-git.git次からはこのリポジトリを利用します。クローンする場合はこちらを利用してください。tagsというディレクトリが作られています。「refs」配下にあるファイルはそれぞれ最後のcommitをファイルに記録しています。master」とすると次のようなcommit履歴が確認できます。17fb14ac7c9493751cff838ba0c22897582406a5」と同じ結果です。「.git/refs/heads/master」ファイルにcommit情報が記述されている為同じ結果となります。上記のことから「.git/refs/heads/master」にcommitのハッシュ値を指定することでmasterのheadが変更可能です。操作は非推奨(通常操作することはありませんが)なので参照を変更する時は次のコマンドを使います。commit」に変わりました。次のコマンドはそこからブランチを切ることができます。branchmastertest「.git/refs」ディレクトリの構成を見ていきましたので、次は「HEAD」ファイルと「.git/refs」を構成する各参照について解説します。HEADHEADファイルは現在作業中のブランチを参照しています。(ブランチ名)」を実行したときは、HEADからブランチが切られます。「.git」直下に配置されます。test」を実行した内容は次の通りです。refs/heads/masterこのHEADファイルを確認したり変更するには次のコマンドを使います。HEADrefs/heads/mastertagstagはGitのオブジェクトでもあります。tagオブジェクトはcommitオブジェクトに似ていますが、treeではなくcommitを指し示します。版の2つのタイプがあります。commit」のハッシュ値になのに対し、注釈付きは別のハッシュの値となっています。これはcommitに対する直接的な参照ではなく、tagオブジェクトがつくられた為です。refsの中は下記の通りです。タグ追加remotesremoteもほぼ上記内容と同様の仕組みとなっています。試しにtestブランチをremoteにプッシュしてみます。するとさっきまでなかった「.git/refs/remotes/origin/test」が追加されます。その中身はtestブランチのHEADのハッシュです。これはつまりremoteを確認することで最後にoriginと通信したときの情報を取得できるということです。同じハッシュとなるまとめ参照にはheadとremoteとtagがあるHEADファイルは参照を参照し現在のブランチのシンボリックリンクを参照しているtagには軽量版と注釈付き版があり注釈付きの方がtagオブジェクトとなるremoteは最後にサーバと通信したときのハッシュを保持しているGitの参照と参照系の下位コマンドが確認できました。普段何気なく使っているコマンドの内側で何が行なわれてるかが分かっておもしろいですね。WooCommerce.。