Git操作 一覧

Introduction

前提として、Gitをインストールしてリモート・リポジトリに接続した状態での実行を想定しています。
大まかな概要として、動画もあります。
「早い話がこんな感じ」ということです。

参考サイト

Gitbook(日本語版)

Index

Git init

Git 初期化方法、リポジトリとして使用するディレクトリに移動して下のコマンドを叩きます。
ラズパイ上で実行してみました。ただし、一度初期化していたので「再初期化」になっています。

git init

Git pull

リモートリポジトリからソースを取得します。参考サイトはこちら

git pull <対象のURL>

<実行結果>

Connect Github

Git接続について

EclipseでGithubからチェックアウト(PULL)してくる手順を記載しています。「プロジェクトの作成From Github」という項で記載しています。

Git Command

操作の履歴を見る

  • log: 参考サイト
    <コマンドサンプル>

    操作の取り消し

  • reset: 参考サイト
    --hard:コミット取り消した上でワークディレクトリの内容も書き換えたい場合に使用。
    --soft:ワークディレクトリの内容はそのままでコミットだけを取り消したい場合に使用。

    1. HEAD^ 直前のコミットを意味する。
    2. HEAD~{n} n個前のコミットを意味する。
    3. HEAD^やHEAD~{n}の代わりにコミットのハッシュ値を書いても良い。
    4. gitのv1.8.5からは、「HEAD」のエイリアスとして「@」が用意されている。
    5. HEAD~とHEAD^と@^は同じ意味。
    6. HEAD^^^とHEAD~3とHEAD~\~~とHEAD~{3}と@^^^は同じ意味。
      <コマンドサンプル>
    git reset --soft "HEAD^"


    まとめると下のようなかたち、参考サイトはこちら

    やってしまったコミット(だけ)をなかったことにしたかったら、--soft
    addもなかったことにしたかったら、オプションなし
    ファイルの変更自体をなかったことにしたかったら、--hard

git操作の現状を確認する

  • status: 現在の状態を表示する上記キャプチャ参照

    git status
  • commit: 参考サイト
    -m(--message): コミットコメントを設定する
    <コマンドサンプル>

    git commit -m "Part1.Chapter1.Section1: じゃんけんゲームを設計する~フローチャート~"

コミットメッセージの修正

参考ページ

  1. コマンドラインで、修正したいコミットのあるリポジトリに移動します
    コマンドプロンプトを開きリポジトリのディレクトリに移動

  2. git commit --amend と入力し、Enter を押します。

  3. テキストエディタでコミットメッセージを編集し、コミットを保存します。

実際にやってみたところGUIでの操作はわかりませんでした(見つけられませんでした)しかし、コマンドでやると簡単に行けました。実際に行った操作は以下の通りです。

> D:
>cd D:\リポジトリのディレクトリ
>git commit --amend (ファイル名の指定)
># VIエディタが開くのでコメントを修正
>git pull
>git push

VIエディタでの編集は下のように文字化けていますが、入力した文字は決定前に通常の文字で入力できます。

Set Charset

文字コードの設定を行います。
git logコマンドを実行すると文字化する場合があります。これの解決方法としては環境変数にLESSCHARSETを追加することです。
具体的には下のコマンドを叩きます。

set LESSCHARSET=utf-8

そして、下のコマンドも叩きます。

git config --global core.quotepath false

Branch

ブランチ操作を行います。
参考にしたサイトはGitbookです。

ブランチの作成
git branch ブランチ名

実行したコマンドは以下の通りです。

git branch preceding1

確認に使用したコマンドは

git branch -a

ブランチを作成しても、現在のブランチは移動していないので、移動する必要があります。

git checkout ブランチ名

移動したら、状態確認

git status

をしてリモート側に、ローカルで作成したブランチをアップロード(PUSH)します。

とりあえずPUSH!とやるとエラーが出ました。

git push

下のコマンドを使用してください。ということで。。。

git push --set-upstream origin preceding1

こんな感じでできました。

新しいブランチに切り替える

git fetch origin 新しいブランチ名

git checkout 新しいブランチ名

fetch origin の部分は、現在選択している~という意味のようです。なので、現在のブランチを新しいブランチにfetchするというようなコマンドになります。

submodule

外部リポジトリを参照して差分ジュールを追加します。参考サイトはGitbookです。
これは、単純に以下のようなコマンドを実行するだけです。

git submodule add "githubのURL"

実際に起動したコマンドは、

git submodule add https://github.com/ZenryokuService/DocumentRepo.git

です。

Mac Git

Macでのgitをインストールはこちらのサイトを見ればできると思います。

brew install git

コマンドでインストールできるようです。
しかし、自分のPCでは下のようなエラーが出ました。

   Use sudo xcode-select --switch path/to/Xcode.app to specify the Xcode that you wish to use for command line developer tools, or use xcode-select --install to install the standalone command line developer tools.
See man xcode-select for more details.

そんなわけで、別の方法を使用しました。
単純に以下の手順を踏みました。

  1. Xcode.appの場所をさがしました→/Application/Xcode.appにあった
  2. 以下のコマンドを叩きました。
    xcode-select --switch /Applications/Xcode.app/

関連ページ一覧

Eclipse セットアップ

  1. Java Install Eclipse〜開発ツールのインストール〜
  2. TensorFlow C++環境〜EclipseCDTをインストール〜
  3. Setup OpenGL with JavaJOGLを使う準備 for Eclipse
  4. Eclipse Meven 開発手順〜プロジェクトの作成〜
  5. Java OpenCV 環境セットアップ(on Mac)
  6. Eclipse SceneBuilderを追加する
  7. JavaFX SceneBuilder EclipseSceneBuilder連携~

Java Basic一覧

  1. Java Basic Level 1 〜Hello Java〜
  2. Java Basic Level2 〜Arithmetic Calculate〜
  3. Java Basic Level3 〜About String class〜
  4. Java Basic Level 4〜Boolean〜
  5. Java Basic Level 5〜If Statement〜
  6. Java Basic Summary from Level1 to 5
  7. Java Basic Level 6 〜Traning of If statement〜
  8. Java Basic Level8 〜How to use for statement〜
  9. Java Basic Level 8.5 〜Array〜
  10. Java Basic Level 9〜Training of for statement〜
  11. Java Basic Level 10 〜While statement 〜
  12. Java Basic Swing〜オブジェクト指向〜
  13. Java Basic Swing Level 2〜オブジェクト指向2〜
  14. サンプル実装〜コンソールゲーム〜
  15. Java Basic インターフェース・抽象クラスの作り方
  16. Java Basic クラスとは〜Step2_1〜
  17. Java Basic JUnit 〜テストスイートの作り方〜

Git関連

  1. Java Git clone in Eclipse 〜サンプルの取得〜
  2. Eclipse Gitリポジトリの取得 GitからソースをPullしよう〜
  3. IntelliJ IDEA GitGitリポジトリからクローン〜

JavaFX関連ページ

  1. Eclipse SceneBuilderを追加する
  2. JavaFX SceneBuilder 〜EclipseとSceneBuilder連携~
  3. JavaFX SceneBuilder〜ボタンにメソッドを割り当てるワンポイント〜
  4. Java プロコンゲーム 〜見た目の作成(SceneBuilderの使用)〜

ステップアップ関連ページ一覧

  1. Java 初めてでも大丈夫〜ステップアッププログラミングのススメ〜
  2. ステップアッププログラミング〜Java FxでHelloWorld解説〜
  3. Java StepUpPrograming〜JavaFX で四則計算〜
  4. Java StepUpPrograming〜JavaFXで画面切り替えを作る1〜
  5. Java StepUpPrograming〜JavaFXで画面切り替え2ボタン作成〜
  6. Java StepUpPrograming〜JavaFXで画面切り替え3アクション〜
  7. Java StepUpPrograming〜JavaFXで画面切り替え4Pane切り替え〜
  8. Java StepUpPrograming〜JavaFXで画面切り替え5WebEngine

JavaFX + ND4Jで機械学習準備

  1. JavaFX + ND4J〜数学への挑戦1:ND4Jのインストール〜
  2. JavaFX + ND4J〜数学への挑戦2: 行列の計算〜
  3. Java + ND4J 〜数学への挑戦3: ベクトル(配列)の作成方法〜

オブジェクト指向関連ページ

  1. [オブジェクト指向の概念1〜OracleDocのチュートリアル1〜](https://zenryokuservice.com/wp/2019/10/301. /%e3%82%aa%e3%83%96%e3%82%b8%e3%82%a7%e3%82%af%e3%83%88%e6%8c%87%e5%90%91%e3%81%ae%e6%a6%82%e5%bf%b5-%e3%80%9coracledoc%e3%81%ae%e3%83%81%e3%83%a5%e3%83%bc%e3%83%88%e3%83%aa%e3%82%a2%e3%83%ab%ef%bc%91/)
  2. オブジェクト指向の概念2〜クラスとは〜

AtomでのGit clone~clone is not available in present state~

clone is not available in present state

Atomで以下のような操作を実行したときに表題のエラーが出ました。

ちょっと調べてみたら、Atomでうまくいかないことがあるようです。

面倒なのでgitコマンドでやったほうが早そうです。

gitコマンドを使う

Git install

  1. Gitのサイトからアプリをダウンロードします。
  2. インストーラがダウンロードできるので、そのままインストール(ダブルクリック)

    ※インストール画面ではすべてデフォルトでOK(そのまま次へ)
  3. インストールが終わったら、ウィンドウズボタン+Rでコマンドプロンプトを開きます。
    + R
  4. そしてgitコマンドでインストール確認
    git -V

リポジトリのクローン

これは自分の場合です。
コマンドプロンプトを立ち上げたらCドライブにいるので(カレントディレクトリがCドライブなので)以下のコマンドでDドライブに移動します。

  1. インストールしたgitに環境変数を設定します。(パスを通すなどと言ったりします。)
    コントロールパネルを開き、検索部分に「環境変数」と入力すると候補が出てくるので「環境変数」を選択します。
    そして、自分(ウィンドウズユーザー)だけで使用するのなら「ユーザー環境変数」
    このPC全体で使用するのならシステム環境変数に設定します。
  2. Github(ウェブサイト)に作成したリポジトリ(リモートリポジトリ)のURLをコピーして、ローカルリポジトリへ(自分のPCへ)クローンします。
    • ローカルリポジトリを配置するディレクトリに移動
      cd D:\privateDocs\MyDoc
    • git clone リモートリポジトリのURL
  3. リポジトリをクローン出来たか確認

想定では、MyDocディレクトリをリポジトリとして使用したかったのですが、このディレクトリにリポジトリが作成されました。。。
まぁ、よしとして続けます。
今まで作成したドキュメントをコミットしたいのでこれらのファイルをリポジトリのディレクトリに移動します。
すると下のように、UnstagedとかStagedの文言を見ることができます。

これらを選択、右クリックすると下のような画面が見れます。

そして、Stageを選択、コミットします。

すると、下のエラーが出ました。

GitError

上のエラーに対する対応を行います。結論から言うとユーザー情報が設定されていないので、それを設定します。コマンドは以下の通り

git --global user.email "自分のEメール"
git --global user.name "Githubのユーザー名"

これで、コミットができました。しかし、これではローカルリポジトリに登録されただけなので、PUSHしてリモートリポジトリへ登録してやる必要があります。

git push

その実行結果が下のようになります。※Githubとコマンプロンプトを重ねてキャプチャしました。
AfterPush

コマンドのみでコミット

  1. 「git status」で未コミットファイルを確認
  2. 「git commit」で全体のコミット ※今回はファイル一つなので後ろにファイルのパスをつける
  3. 「git commit -m "メッセージ"」コミットコメントをつける、上のものと使い分けるようにする
  4. コミットしたらあとはPUSH

実行結果

関連ページ

関連ページ一覧

Eclipse セットアップ

  1. Java Install Eclipse〜開発ツールのインストール〜
  2. TensorFlow C++環境〜EclipseCDTをインストール〜
  3. Setup OpenGL with JavaJOGLを使う準備 for Eclipse
  4. Eclipse Meven 開発手順〜プロジェクトの作成〜
  5. Java OpenCV 環境セットアップ(on Mac)
  6. Eclipse SceneBuilderを追加する
  7. JavaFX SceneBuilder EclipseSceneBuilder連携~

Java Basic一覧

  1. Java Basic Level 1 〜Hello Java〜
  2. Java Basic Level2 〜Arithmetic Calculate〜
  3. Java Basic Level3 〜About String class〜
  4. Java Basic Level 4〜Boolean〜
  5. Java Basic Level 5〜If Statement〜
  6. Java Basic Summary from Level1 to 5
  7. Java Basic Level 6 〜Traning of If statement〜
  8. Java Basic Level8 〜How to use for statement〜
  9. Java Basic Level 8.5 〜Array〜
  10. Java Basic Level 9〜Training of for statement〜
  11. Java Basic Level 10 〜While statement 〜
  12. Java Basic Swing〜オブジェクト指向〜
  13. Java Basic Swing Level 2〜オブジェクト指向2〜
  14. サンプル実装〜コンソールゲーム〜
  15. Java Basic インターフェース・抽象クラスの作り方
  16. Java Basic クラスとは〜Step2_1〜
  17. Java Basic JUnit 〜テストスイートの作り方〜

Git関連

  1. Java Git clone in Eclipse 〜サンプルの取得〜
  2. Eclipse Gitリポジトリの取得 GitからソースをPullしよう〜
  3. IntelliJ IDEA GitGitリポジトリからクローン〜

JavaFX関連ページ

  1. Eclipse SceneBuilderを追加する
  2. JavaFX SceneBuilder 〜EclipseとSceneBuilder連携~
  3. JavaFX SceneBuilder〜ボタンにメソッドを割り当てるワンポイント〜
  4. Java プロコンゲーム 〜見た目の作成(SceneBuilderの使用)〜

ステップアップ関連ページ一覧

  1. Java 初めてでも大丈夫〜ステップアッププログラミングのススメ〜
  2. ステップアッププログラミング〜Java FxでHelloWorld解説〜
  3. Java StepUpPrograming〜JavaFX で四則計算〜
  4. Java StepUpPrograming〜JavaFXで画面切り替えを作る1〜
  5. Java StepUpPrograming〜JavaFXで画面切り替え2ボタン作成〜
  6. Java StepUpPrograming〜JavaFXで画面切り替え3アクション〜
  7. Java StepUpPrograming〜JavaFXで画面切り替え4Pane切り替え〜
  8. Java StepUpPrograming〜JavaFXで画面切り替え5WebEngine

JavaFX + ND4Jで機械学習準備

  1. JavaFX + ND4J〜数学への挑戦1:ND4Jのインストール〜
  2. JavaFX + ND4J〜数学への挑戦2: 行列の計算〜
  3. Java + ND4J 〜数学への挑戦3: ベクトル(配列)の作成方法〜

オブジェクト指向関連ページ

  1. [オブジェクト指向の概念1〜OracleDocのチュートリアル1〜](https://zenryokuservice.com/wp/2019/10/301. /%e3%82%aa%e3%83%96%e3%82%b8%e3%82%a7%e3%82%af%e3%83%88%e6%8c%87%e5%90%91%e3%81%ae%e6%a6%82%e5%bf%b5-%e3%80%9coracledoc%e3%81%ae%e3%83%81%e3%83%a5%e3%83%bc%e3%83%88%e3%83%aa%e3%82%a2%e3%83%ab%ef%bc%91/)
  2. オブジェクト指向の概念2〜クラスとは〜

php GitApi 〜GitApiを使用する〜

GIt APIを使用する

〜API(WebAPI)を使用するのに、レンタルサーバーの都合でPHPを使用することになってしまったんでPHPでのGitAPIを使用します。

作成物は下のリンクです

https://zenryokuservice.com/mokuhyoAP.php

ツイッターが表示されています。

Gitにコミットした時に自動ツイートする処理を作成しました。

WebAPIはリクエストを送ればOK

PHPだろうが、PythonだろうがJavaだろうが。。。早い話が、WebAPIというのは以下の手順で使用します。

  1. WebAPIを提供してるURLにリクエストを送信。
  2. レスポンスを取得。

上記のような手順で使用します。。。なので使用する言語はリクエストが遅れればなんでもOKです。本当はJavaで実装したかった。。。がこれも今使っているレンタルサーバーでJavaが使えなかったので(もうちょっと調査すれば使えるかも?)後々に方法を考えることにします。

チュートリアル(コマンド実行)

参考にしたサイト
上のリンクにはGitAPIのチュートリアルが記載されています。(Githubのページなので英語です)
そして、そこにはコマンドでの使用方法が記載されています。
とりあえずはハローワールド的なコマンドを叩くような記載があったので、それを実行します。

curl https://api.github.com/users/ZenryokuService

これはcurl https://api.github.com/users/Gitユーザー名でコマンドを叩いた時のものです。
追伸:パスワードなしでアクセスできる情報ですので問題ありません。

レスポンスの内容は以下のようなものです。

{
  "login": "ZenryokuService",
  "id": 11029365,
  "node_id": "MDQ6VXNlcjExMDI5MzY1",
  "avatar_url": "https://avatars2.githubusercontent.com/u/11029365?v=4",
  "gravatar_id": "",
  "url": "https://api.github.com/users/ZenryokuService",
  "html_url": "https://github.com/ZenryokuService",
  "followers_url": "https://api.github.com/users/ZenryokuService/followers",
  "following_url": "https://api.github.com/users/ZenryokuService/following{/other_user}",
  "gists_url": "https://api.github.com/users/ZenryokuService/gists{/gist_id}",
  "starred_url": "https://api.github.com/users/ZenryokuService/starred{/owner}{/repo}",
  "subscriptions_url": "https://api.github.com/users/ZenryokuService/subscriptions",
  "organizations_url": "https://api.github.com/users/ZenryokuService/orgs",
  "repos_url": "https://api.github.com/users/ZenryokuService/repos",
  "events_url": "https://api.github.com/users/ZenryokuService/events{/privacy}",
  "received_events_url": "https://api.github.com/users/ZenryokuService/received_events",
  "type": "User",
  "site_admin": false,
  "name": "Takunoji",
  "company": "ZenryokuService",
  "blog": "https://zenryokuservice.com/wp",
  "location": "Japan",
  "email": null,
  "hireable": null,
  "bio": "My favorite word is \"Rock'n roll must not be a day\"\r\n好きな言葉は「ロッケンロールは一日にしてならず」です。",
  "public_repos": 23,
  "public_gists": 1,
  "followers": 2,
  "following": 3,
  "created_at": "2015-02-16T12:53:02Z",
  "updated_at": "2019-05-19T08:53:20Z"
}

見ての通りJSON形式でレスポンスを受け取りました。

PHPでのGit API

PHPの場合は。これをインストールしてやったほうが楽かも?

しかし、今作成しているプロジェクトサイトはツイッターAPIでコミットコメントを取得するので使わないかな?










TwitterAPI 〜PHPコードでツイートする手順〜

イントロダクション

TwoitterAPI(PHP版)を使用して、自分のプロジェクトサイトに以下の機能を追加しました。

  1. ツイートを表示する。
  2. GitからWebhookを受ける

TwitterAPIの使い方

実行結果

ツイートの実行結果

ソースコード

/** エンコード */
header("Content-Type: text/html; charset=UTF-8");
// TwitterOAuth
require_once("twitteroauth-master/autoload.php");
use Abraham\TwitterOAuth\TwitterOAuth;

// エラー出力
//ini_set('display_errors', 'On');
$access_token = "デベロッパ登録したときに表示されるアクセストークン";
$access_token_secret = "デベロッパ登録したときに表示されるアクセストークン_シークレット";

$connection = new TwitterOAuth("コンシューマ・キー"
        ,"コンシューマ_シークレット・キー"
        , $access_token, $access_token_secret);

// 自分のツイートの取得
// $content = $connection->get("account/verify_credentials");
// var_dump($content);

// ツイート検索
// $statuses = $connection->get("search/tweets", ["q" => "twitterapi"]);
// var_dump($statuses);

// ツイート送信
$statues = $connection->post("statuses/update", ["status" => "Testing hello world"]);
var_dump($statues);

関連ページ

Tweetボタンの追加方法
ツイッターデベロッパ登録
Githookのリクエスト内容一覧










Twitter APIを使うために〜Twitterへのデベロッパ登録〜

イントロダクション

TwitterAPIを使用してツイッター連携を実装しようとしています。現状は

PHPでGithookからのリクエストを受けてツイートする

というプログラムを作成しようとしています。そんなわけで。。、

Twitterへのデベロッパ登録

早い話が、Twitterへの開発者登録を行い、TwitterAppと登録(作成したアプリのあるURL場所を登録)します。

まずは下のサイトにアクセスします。

ツイッターのデベロッパサイト

そして、アプリケーションの登録のために、下ようなインデックスの部分をGoogleに翻訳してもらって読みます。

Creating a Twitter app

そうすると、デベロッパ登録のページに誘導されるのでそちらに移動します。

操作は画面の指示に従う感じでスムーズに完了できました。

入力するときに、アプリケーションの用途や目的などを説明してください(discribe your app)なんて文言がありますので、ちょっと考えておくと入力が楽です。
でわでわ。。。

<参考>

TwitterAPIライブラリの使い方





<meta property="og:description" content=“Git + TwitterAPIの連携を実装するためにTwitterデベロッパ登録を行いました。” />




Git Webhook 〜リクエストの中身一覧〜

イントロダクション

Githubにコミット(PUSH)したときなどにWebhookを使用してGithubからリクエストを飛ばすことができます。

これを受信して処理を行うのに自分はPHPを使用しました。PHPで受信したリクエストの中身をメモがてらに記載します。

Githookから送られるデータ

前提として以下のコードでGitからの送信されたデータ(JSON)を取得します。

 $json_string = file_get_contents('php://input');
 $json = json_decode($json_string,true);

取得したデータをvar_dumpできれば良いのですが、ブラウザで開くリクエストではないのでファイル出力して確認しました。重要であろう部分を抜粋しました。

// JSONからキーを指定して取得
キー: head_commit / 中身: Array
// 中身を取り出しました。
 中身のキー: distinct /値: 1
 中身のキー: message /値: テスト27(コミットコメント)
 中身のキー: timestamp /値: 2019-06-09T18:07:35+09:00
 中身のキー: url /値: https://github.com/ZenryokuService/GoalAchievement/commit/74adcfaf088fd0cf2955cea0769b369d2f76f156
キー: repository / Value: Array
 中身のキー: name / ArrayValue: GoalAchievement
 中身のキー: full_name / ArrayValue: ZenryokuService/GoalAchievement
 中身のキー: html_url / ArrayValue: https://github.com/ZenryokuService/GoalAchievement
 中身のキー: description / ArrayValue: 目標を達成するためのフローを作り上げる、Javaでテスト用のプログラムを作成。

しかし、シークレットキーなどがみつかりませんでした。。。









PHP コマンド実行 〜MacOSでphpコマンドを叩く(環境変数の設定と暗号化)〜

イントロダクション

TwitterAPIを使用するのに、ユーザー名とパスワードを使用します。しかし、このような情報はインターネット上に公開するとよろしくないので。。。

暗号化します

phpをテストするのに今まではウェブサーバー上でやっていましたが、ローカル(自分のパソコン上)で実行したい場合があります(今回のように)。なのでphpコマンドを実行する方法を記載します。

Macの場合はすでにコマンドが使用できるようです。しかし使えない場合にはどうしたら良いのか?自分の端末では再現できませんが、要点だけ。。。

早い話が、「php.exe」などの起動ファイルを環境変数に通せばOKです。環境変数とはシンプルに示すと以下のようになります。

REM Windowsの場合以下のコマンドで表示される
>path

# Macの場合は以下のコマンドで表示される
$ echo $PATH

このコマンドで表示される、パスが環境変数に設定がされている状態です。

とりあえず、Windowsの場合は、php.exeがあるフォルダを環境変数に加えればOKです。 Macの場合はHome brewを使用するようです。詳細は本家サイトを参照ください。

PHPコマンドで暗号化

今回はJavaを使いたいのでJarファイルを作成してPHPコマンンドでjarを実行してみます。

この動画では「Hello Java」を出力しているだけですが、Javaの処理を変えてやれば「Java呼び出し」はできているのでphpから起動できることの証明になります。

ちなみにphpでjavaを起動した時は環境変数などが読み込まれていないのでパスをそのまま実装します。

そして実行したコマンドは以下の通りです。

JDKへのパス/bin/java -jar 起動するJARファイル

<実行結果>

------- output ------------array(1) {
  [0]=>
  string(10) "Hello Java"
}

純粋なJavaの起動する方法はJavaBasic〜Hello World〜を参照ください。

そして、phpから起動するときに暗号化したパスワードを下のようにプログラム引数に渡します。

java -jar Cription.jar 暗号化したパスワード

phpのコードは以下のようになります。

<?php
$result = null;
$output = null;
exec('/Library/Java/JavaVirtualMachines/jdk1.8.0_144.jdk/Contents/Home/bin/java -jar Cryption.jar 暗号化したパスワード 0123456789012345', $output, $result);

print("------- output ------------");
var_dump($output);
print("-------- result -----------");
var_dump($result);
?>

実行結果

php test.php # コマンドの実行
------- output ------------array(4) {
  [0]=>
  string(54) "プログラム引数:暗号化したパスワード"
  [1]=>
ڀ}"ng(33) "暗号化:
  [2]=>
  string(40) ".Jpą!"
  [3]=>
  string(45) "復号号化:暗号化したパスワード"
}
-------- result -----------int(0)

とシンプルな感じです。

Javaのコードに関してはGitにあげてあります。

実際にテスト

作成したJARファイルをサーバーにアップします。URLは下に示します。

Githookのリクエストパラメータを取得します。

とりあえずテストします。

GitのWebhookからリクエストを受けて、リクエストの内容を出力して見ました。ファイルのパーミッション(権限)の部分で手こずりましたが、何とか。。。

下のようなコード(PHP)でログを取得しました。

 // Gitから(Webhookで)送信されたJSON
 $json_string = file_get_contents('php://input');
 // 送信されたJSONを読める形に変換する
 $json = json_decode($json_string,true);
 $fileName = chmod('githookLog.txt', 0666);
 $outData;
 foreach ($json as $key => $value) {
 $outData =$outData . "Key: " . $key . " / Value: " . $value;
 }
 file_put_contents('githookLog.txt', '--JSON:' . $_SERVER['REMOTE


悲報

レンタルサーバー上ではコマンドでjavaの実行ができませんでした。。。。

<実行手順>

  1. JDKの中身をサーバー上にアップロード
  2. PHPからexec関数を実行
    exec('../java/bin/java -jar Cryption.jar 暗号化したパスワード 0123456789012345', $output, $result);

 



PHP Git 連携方法〜暗号化と復号化、GitとTwitterの連携〜

イントロダクション

レンタルサーバーでWebAPI(TwitterAPIなど)を使用する時にユーザー名とパスワードが必要な時があります。しかしユーザー名とパスワードは機密情報なので公開したくありません。ではどーしたら良いでしょうか?

暗号化と復号化

よく世間で耳にするのはSSL通信とか暗号化通信とか、セキュリティ。。。なんて言葉がよく聞かれます。

では、どのようにして機密情報を保護したら良いでしょうか?無難な方法としては暗号化です。これを使用するためには復号も必要ですがこれらをワンセットにしておけば問題ありません。

PHPでの暗号化と復号化

Mcrypt関数を使用するのが簡単だと(たまたま見つけたソース)思うのでこれを使用します。

自分の使用する端末では各関数への参照を探すのが面倒なのでレンタルサーバーの環境でテストします。つまりファイルをアップロードしてテストします。他の人が皆居場所なら問題ないでしょう(笑)

PHPコードを作成します。

参考サイトのコードをコピって起動してみます。出力されたデータは以下のようなものでした。
「string(18) "證怜捷蛹悶ョ繝シ繧ソ" string(24) "\c2ElE袿q刔]5�ーイnェツ表" string(24) "證怜捷蛹悶ョ繝シ繧ソ" ok」まぁ文字化けしています。
とりあえずはエンコード処理を追加します。

/** エンコード */
header("Content-Type: text/html; charset=UTF-8");

改めて実行します。出力結果は下に。。。

「string(18) "暗号化データ" string(24) "\��c2ElE��q��]5���n�•\" string(24) "暗号化データ" ok」

エンコードの問題でした。。。

ここから使用したいように変更を加えます。PHPコードは下のようになっています。

/** エンコード(追加した部分) */
header("Content-Type: text/html; charset=UTF-8");
/** 追加終わり */
$key = "暗号化キー";
$plain_text = "暗号化データ";
/* モジュールをオープンし、IV を作成 */
$td = mcrypt_module_open('des', '', 'ecb', '');
$key = substr($key, 0, mcrypt_enc_get_key_size($td));
$iv_size = mcrypt_enc_get_iv_size($td);
$iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);

/* 暗号化ハンドルを初期化 */
if (mcrypt_generic_init($td, $key, $iv) != -1) {

	/* データを暗号化 */
	$c_t = mcrypt_generic($td, $plain_text);
	mcrypt_generic_deinit($td);

	/* 復号のため、バッファを再度初期化 */
	mcrypt_generic_init($td, $key, $iv);
	$p_t = mdecrypt_generic($td, $c_t);

	/* 後始末 */
	mcrypt_generic_deinit($td);
	mcrypt_module_close($td);
}

/* 結果 */
var_dump($plain_text, $c_t, $p_t);

/* 元の文字と比較する場合 */
if (strncmp($p_t, $plain_text, strlen($plain_text)) == 0) {
	echo 'ok';
} else {
	echo 'error';
}

設計をする

今回はTwitterAPIを使用してgithubから飛んでくるリクエスト(hook)を受けてツイートするというシンプルな実装です。下準備として以下のことを行います。

GithubのWebhook設定を行う。

手順はリンク先にあります。そしてこの設定を行う時に「Secret」という項目があるのでそこに値を入れます。そしてこれを変換するときのキーとするもよし、アクセスしてきたURLが想定通りの(Github)からのリクエストか判断するためのものでもよし。設定しておくと便利です。

<サンプル設計>

これは、自分が簡単に設計したものになります。

  1. GithubよりWebhookを受けたかどうか判定。
  2. Githubよりのリクエストでない場合は、処理をしない。
  3. Githubよりのリクエストだった場合は4〜の処理を行う。
  4. ユーザー情報ファイルを読み込む(暗号化済み)
  5. TwitterAPIのライブラリを読み込む。
  6. 上記のファイルより取得したユーザー名とパスワードでTwitterにログインしてツイート
  7. あと処理が必要ならやる(実装後に判断)

あとは実装あるのみです。。。

でわでわ。。。









Git 使い方 〜TwitterAPIと連携するには?〜

イントロダクション

TwitterAPIを利用して、GitへPUSHした時にツイートする仕組みを作ろうと考えました。結論

  1. GitでWebhookを設定
  2. リクエストを受けて起動するアプリを作ればOK!

GitでWebhook設定

対象のリポジトリからsettings -> webhook ->必要な項目を入力

上が入力した例です。ちなみにこの設定を使用しようとしています。
そして、登録しました。
なのでこのURLを叩けばコミットした通知をツイートすることができます。詳細は後ほど。。。

次はツイッターAPIを使うための準備を始めたいと思います。

続きを読む Git 使い方 〜TwitterAPIと連携するには?〜

Git 使い方〜Twitter連携の方法〜

イントロダクション

プロジェクトの情報を発信するためのサイトを作成しようとしています、そこで現在使用しているGitリポジトリとTwitterを連携させようと考え、その方法を調べたので記載します。

参考にしたのはこちらのサイト

とりあえずは、ぱっと見でSettingのとこからいけそうかと思ったけど、手順を踏んで見るとちょっと違う感じだったので、ほかの方法を使用することにします。

GithubWebHookを使う

この方法は、王道な方法だと思います。しかし、Twitterと連携する方法としてはほかにもあるのでそちらも調べてみようと思います。

など、色々とある様ですがGithubのWebHookをしようしようと思います。

そして、GitにもGithub, gitコマンド、Git Labなど色々とあるのでここでは「Github」のことをGitと呼びます。

Github WebHookの使い方

まずは、ページを開きます(Githubのリポジトリ)

1.自分のリポジトリページを開きます。

2.そして、右端にある「Setting」をクリックします。

3.左のリストになっているとこにある「Webhook」をクリックします。

そして、詳細なところはガイドを参照しながらやるとして

ここでパスワードを聞かれますので入力します。すると以下のような画面が表示されます。

入力する項目

  1. Payload URL
  2. Content type
  3. Secret

上記の項目を入力して、以下のイベントをトリガーにして起動するように設定するみたいです。起動するというのはPayload URLへリクエストを飛ばすという意味です。

Which events would you like to trigger this webhook?

ここで、Payload URLにTwitter APIを起動するプログラムへのリクエストを設定してやればおっけ!というわけです。
自分の場合は、使用しているレンタルサーバー(ミニムサーバ)に配置したphp ファイルのURLを指定して、コミットした時に、php が動くように設定しました。
でわでわ。。。