Gistのコードをブログに貼るときのテクニックとGit, GitHub, Gistの違いを簡単に説明します
Gistは便利です。私も利用しています。しかし、いざGistを利用しようとするとGitHubという言葉を目にすると思います。GitHubとの違いを検索すると今度はGitという言葉も出てきます。Git, GitHub, Gistとなにがなにやらわかりません。そこでGistのテクニックの紹介の前に3つの違いについて簡単に説明します。わからないなりに勉強がてら調べてみました。Gistのテクニックの紹介だけを知りたい方は以下のリンクをクリックしてください。
Git, GitHub, Gistの違い
Gitについて
まずはGitについて説明します。Wikiで調べると以下のような説明でした。
Gitは、プログラムのソースコードなどの変更履歴を記録・追跡するための分散型バージョン管理システムである。(中略)Gitでは、各ユーザのワーキングディレクトリに、全履歴を含んだリポジトリの完全な複製が作られる。したがって、ネットワークにアクセスできないなどの理由で中心リポジトリにアクセスできない環境でも、履歴の調査や変更の記録といったほとんどの作業を行うことができる。これが「分散型」と呼ばれる理由である。
ここで引っかかる「リポジトリ」という言葉は仕様、データ、デザインなどを管理する貯蔵庫のようなものらしいです。Gitとは複数人で同じファイルを編集する場合に競合しないように自動で管理してくれるシステムのことです。例えばハリル監督について.text
ファイルの中身を複数人で編集していると考えてください。
Aさんがハリル監督について編集しています。
同時にBさんも編集していますがAさんとは内容が少し違います。こんなときにGitはAさんとBさんの編集内容をローカルで保存しながら、ほどよいタイミングでネットワークから差分ファイルを取り寄せたり、ローカルの編集内容をネットワークにアップロードします。特定のサーバーを介さずに編集者同士で差分をやり取りすることも可能らしいです。掘り下げるときりがないのでこの辺にしておきますが簡単にまとめると複数人での編集作業を効率良くサポートしてくれるシステムということですね。
GitHubについて
GitHub(ギットハブ)はソフトウェア開発プロジェクトのための共有ウェブサービスであり、Gitバージョン管理システムを使用する。 Ruby on RailsおよびErlangで記述されており、GitHub社によって保守されている。 主な開発者はChris Wanstrath、PJ Hyett、Tom Preston-Wernerである。 GitHub商用プランおよびオープンソースプロジェクト向けの無料アカウントを提供している。 2009年のユーザー調査によると、GitHubは最もポピュラーなGitホスティングサイトとなった。
Gitを効率良く使うためのサービスです。コードの公開やSNSを利用できます。Gitの仕組みをを利用したいのであればGitHubが便利ということですね。
Gistについて
GitHubが提供するコードを共有するサービスでコードの部品を共有できるのが大きな特徴です。
Gistをブログで利用するときのテクニック
短いですが本題です。通常はGistのCopy to clipboardボタンを押してブログにペーストするか、はてなブログなら編集画面の右にある縦に並んだボタンのGist貼り付けボタンを押すことで貼り付けられるのですが、そのままのペーストすると全てのコードが一度に貼られてしまいます。しかし、いくつかあるコードの1つだけを貼り付けたいときには不便ですよね。そんなときはGistでCopy to clipboardボタンを押してペーストしたコードのうしろにfile=ファイル名と書き足すことで指定したファイルだけを貼り付けることができるんです。当たり前のことでしたら申し訳ないのですが、私は昨日知りました。
まとめ
いかがでしたか?簡単ですが以上です。1人でコードを書くだけならばGit, GitHubの恩恵は少ないかもしれませんが知らないものを触ってみることで得るものもあると思います。私自身も調べるまでわからないことが多くて勉強になりました。GistにかんしてはSecretとPublicの違いやコードの種類を入力することで自動で色分けされるところまで書こうと考えていたのですが時間が足りないので今回はここまでにしておきます。
JAVAの継承について考える 第1回目
猫も犬も大きくとらえれば動物です。そして動物や植物は大きくとらえれば生物です。オブジェクト指向であるJAVAは現実世界のふるまいを仮想世界で再現することらしいのでCreature
インターフェースを作りAnimal
クラスで実装しCat
, Dog
クラスで継承してみました。便利だと感じると同時に大きな疑問も残ったので、それをシェアしたいと思います。
継承のテスト 1
それでは、ひとつずつ見ていきます。
Creature.java
Creature
インターフェースです。生き物は走ったり鳴いたりするはずと考えたのですが植物は走りませんし鳴きませんから、これは失敗です。そう考えるとCreature
インターフェースに定義できるメソッドはeat
でしょうか。そのへんの掘り下げは今回は置いときましょう。インターフェースなので以下の2つの条件をクリアーしています。
- フィールドを持たない
- メソッドが
abstract
である
Animal.java
Creature
インターフェースを実装したAnimal
クラスです。ここで疑問がわきました。多様性を持たせるためにAnimal
クラスをインスタンス化したいのですがrun()
メソッドもbark()
メソッドもAnimal
クラスの段階では内容が決まっていません。羽があるのかないのかもわかりません。しかし、ここでabstract
をつけてしまうとインスタンス化ができないという悩みが生まれます。オブジェクト指向としては間違っているかもしれませんが、とりあえず逃げた
、鳴いた
と定義しました。
Cat.java, Dog.java
親クラス(継承元)であるAnimal
クラスのbark()
メソッドとrun()
メソッドをオーバーライドしています。継承した場合はオーバーライドしないとエラーになるので忘れないようにします。ここで注目してほしいのがAnimal
クラスにはなかったtraning()
メソッドです。動物の時点ではしつけができない動物も含まれるのでCat
クラスDog
クラスで定義しました。
Main.java
ここでオブジェクト指向の武器である多様性を発揮させます。猫も犬もざっくり見れば動物と考えることで9行目でAnimal
型のanimal[]
配列のなかにcat
とdog
を入れます。わざわざ配列のなかに入れることでなにをするかというと12行目を見てください。拡張for文です。for ( 型 変数名 : コレクション名)
という順番で指定します。ここでの変数名は拡張for文のなかでしか使われないローカル変数です。わかりやすい好きな名前をつけてください。ここではa
と指定しましたがi
やn
などでもかまいません。
13行目のa.bark();
1行でCat
クラスとDog
クラスのそれぞれのbark()
メソッドを呼び出しています。それぞれをざっくりと動物として考えることで多様性のメリットが利用できました。14行目も同じです。そして15行目ですがtraning()
メソッドはAnimal
クラスで定義していませんのでコメントアウトを外すとエラーになります。多様性を利用できるのは親クラスが持つメソッドのみということですね。最後は18,19行目でtraning()
メソッドを呼び出して終わりです。
result
生まれた疑問
- 多様性を利用したい場合
Animal
クラスのそれぞれのメソッドはどう定義すればよかったのか?
インスタンス化したいのでabstract
にするのは論外ですが今回のように強引に実装するのは間違っていると感じました。しかし解決策が見当たりません。
まとめ
手探りながら文章化して説明すると気付かされることが多いので勉強になるのですが時間がかかるのが難点です。もっとたっぷりと勉強したい!
初めてのじゃんけんプログラムが完成しました!
4日間かかってついに初めてのじゃんけんプログラムが完成しました!この4日間は仕事中もプログラムのことが頭をよぎるくらい楽しめました。改善点は多いですが、とりあえずじゃんけんができるプログラムが動いたことの喜びは大きいです。前日の落とし穴だったあと出しじゃんけん問題はじゃんけんの表示のタイミングを変更することで解決しました。あいこの場合は再度WinOrLose();
メソッドを呼び出すことで再戦が可能です。ただ分岐させるだけのFizzBuzz
プログラムとは違い、じゃんけんプログラムは学ぶことが多かったです。
あなたの手を選んでください 1:グー 2:チョキ 3:パー じゃんけんぽん! 2 あなた:チョキ CPU:チョキ あいこでしょ! あなたの手を選んでください 1:グー 2:チョキ 3:パー 3 あなた:パー CPU:チョキ あなたの負けです
とりあえず動いたけれど・・・
じゃんけんプログラムにかんしてはこれで終わりではないです。機能の追加だけではなくやらなければならないことがあれやこれや見えてきました。今のままではエンジンがかかって走り出すことはできたけどハンドルもブレーキもない車みたいなものです。
やならければならないこと
- 1~3以外の数字を入力した場合のエラー処理
- あと出し表示の問題の解決のために無理やり移動させた処理を適切なクラスに任せる
やりたいこと
- 1~3の入力したキーが表示されてしまうので可能なら非表示にする
- プログラムを終了させるまでの通算成績の記録と表示
- CPUの追加機能
- 実機によるAndroid上でのゲームプレイ
Androidで動かすためにJAVAの勉強を始めたので実機でのプログラミングはぜひやってみたいです。
次の勉強は
じゃんけんプログラムを続けるのもいいですが少し気分を変えたいので今度は気になっていた継承について勉強しようと思います。あとはブログのデザインを変えてみたいのでHTMLとCSSについても同時に勉強中です。