プログラミングいちねんせい

プログラミング歴ゼロの初心者がもがくサイトです

Gistのコードをブログに貼るときのテクニックとGit, GitHub, Gistの違いを簡単に説明します

Gistは便利です。私も利用しています。しかし、いざGistを利用しようとするとGitHubという言葉を目にすると思います。GitHubとの違いを検索すると今度はGitという言葉も出てきます。Git, GitHub, Gistとなにがなにやらわかりません。そこでGistのテクニックの紹介の前に3つの違いについて簡単に説明します。わからないなりに勉強がてら調べてみました。Gistのテクニックの紹介だけを知りたい方は以下のリンクをクリックしてください。

Gistの説明へ移動

Git, GitHub, Gistの違い

Gitについて

まずはGitについて説明します。Wikiで調べると以下のような説明でした。

Gitは、プログラムのソースコードなどの変更履歴を記録・追跡するための分散型バージョン管理システムである。(中略)Gitでは、各ユーザのワーキングディレクトリに、全履歴を含んだリポジトリの完全な複製が作られる。したがって、ネットワークにアクセスできないなどの理由で中心リポジトリにアクセスできない環境でも、履歴の調査や変更の記録といったほとんどの作業を行うことができる。これが「分散型」と呼ばれる理由である。

ここで引っかかる「リポジトリ」という言葉は仕様、データ、デザインなどを管理する貯蔵庫のようなものらしいです。Gitとは複数人で同じファイルを編集する場合に競合しないように自動で管理してくれるシステムのことです。例えばハリル監督について.textファイルの中身を複数人で編集していると考えてください。

f:id:javacurry:20170614155705p:plain

Aさんがハリル監督について編集しています。

f:id:javacurry:20170614155753p:plain

同時に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について

Gist(ギスト) - GitHub のサービス。ソースコード単体を投稿できる。

GitHubが提供するコードを共有するサービスでコードの部品を共有できるのが大きな特徴です。

Gistをブログで利用するときのテクニック

短いですが本題です。通常はGistのCopy to clipboardボタンを押してブログにペーストするか、はてなブログなら編集画面の右にある縦に並んだボタンのGist貼り付けボタンを押すことで貼り付けられるのですが、そのままのペーストすると全てのコードが一度に貼られてしまいます。しかし、いくつかあるコードの1つだけを貼り付けたいときには不便ですよね。そんなときはGistでCopy to clipboardボタンを押してペーストしたコードのうしろにfile=ファイル名と書き足すことで指定したファイルだけを貼り付けることができるんです。当たり前のことでしたら申し訳ないのですが、私は昨日知りました。

f:id:javacurry:20170614192733p:plain

まとめ

いかがでしたか?簡単ですが以上です。1人でコードを書くだけならばGit, GitHubの恩恵は少ないかもしれませんが知らないものを触ってみることで得るものもあると思います。私自身も調べるまでわからないことが多くて勉強になりました。GistにかんしてはSecretとPublicの違いやコードの種類を入力することで自動で色分けされるところまで書こうと考えていたのですが時間が足りないので今回はここまでにしておきます。

JAVAの継承について考える 第1回目

猫も犬も大きくとらえれば動物です。そして動物や植物は大きくとらえれば生物です。オブジェクト指向であるJAVA現実世界のふるまいを仮想世界で再現することらしいのでCreatureインターフェースを作りAnimalクラスで実装しCat, Dogクラスで継承してみました。便利だと感じると同時に大きな疑問も残ったので、それをシェアしたいと思います。

継承のテスト 1

それでは、ひとつずつ見ていきます。

Creature.java

Creatureインターフェースです。生き物は走ったり鳴いたりするはずと考えたのですが植物は走りませんし鳴きませんから、これは失敗です。そう考えるとCreatureインターフェースに定義できるメソッドはeatでしょうか。そのへんの掘り下げは今回は置いときましょう。インターフェースなので以下の2つの条件をクリアーしています。

  1. フィールドを持たない
  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[]配列のなかにcatdogを入れます。わざわざ配列のなかに入れることでなにをするかというと12行目を見てください。拡張for文です。for ( 型 変数名 : コレクション名)という順番で指定します。ここでの変数名は拡張for文のなかでしか使われないローカル変数です。わかりやすい好きな名前をつけてください。ここではaと指定しましたがinなどでもかまいません。

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についても同時に勉強中です。