dackdive's blog

新米webエンジニアによる技術ブログ。JavaScript(React), Salesforce, Python など

GitHubでの開発に便利なツール3選

ツールというか CLI
全部有名なのでほとんどの方がご存知だと思うが、自分がよく使うものを。

1. hub

https://github.com/github/hub

git コマンドの機能を拡張したもの。

(参考)

インストール

Mac の場合は Homebrew から。

$ brew install hub
$ which hub
/usr/local/bin/gibo
使い方

README 見てるとエイリアスを設定して git のかわりに使うもののようだけど
私は以下の2つのコマンドだけを直接 hub コマンドとして使用している。

# GitHub にリポジトリを作成する
$ hub create foo
Updating origin
created repository: zaki-yama/foo

# 現在いるリポジトリを GitHub で開く
$ hub browse


2. gibo

https://github.com/simonwhitaker/gibo

.gitignore を自動生成してくれる。

(参考)

インストール

同じく Homebrew からインストール可能。

$ brew install gibo
$ which gibo
/usr/local/bin/gibo
使い方

gibo の後ろに開発したい言語やフレームワーク名を入れると、その言語/フレームワークに合う .gitignore の中身を出力してくれる。

# -l で一覧が表示できる
$ gibo -l
=== Languages ===

Actionscript            Composer                ExtJs                   Jekyll                  Node                    Rails                   TeX
Ada                     Concrete5               Fancy                   Joomla                  Objective-C             RhodesRhomobile         Textpattern
Agda                    Coq                     Finale                  KiCad                   OCaml                   ROS                     TurboGears2
Android                 CraftCMS                ForceDotCom             Kohana                  Opa                     Ruby                    Typo3
AppceleratorTitanium    CUDA                    Fortran                 LabVIEW                 OpenCart                Rust                    Umbraco
AppEngine               D                       FuelPHP                 Laravel                 OracleForms             Sass                    Unity
ArchLinuxPackages       Dart                    Gcov                    Leiningen               Packer                  Scala                   UnrealEngine
Autotools               Delphi                  GitBook                 LemonStand              Perl                    SCons                   VisualStudio
C++                     DM                      Go                      Lilypond                Phalcon                 Scrivener               VVVV
C                       Drupal                  Gradle                  Lithium                 PlayFramework           Sdcc                    Waf
CakePHP                 Eagle                   Grails                  Lua                     Plone                   SeamGen                 WordPress
CFWheels                Elisp                   GWT                     Magento                 Prestashop              SketchUp                Xojo
ChefCookbook            Elixir                  Haskell                 Maven                   Processing              Stella                  Yeoman
Clojure                 Elm                     Idris                   Mercury                 Python                  SugarCRM                Yii
CMake                   EPiServer               IGORPro                 MetaProgrammingSystem   Qooxdoo                 Swift                   ZendFramework
CodeIgniter             Erlang                  Java                    Nanoc                   Qt                      Symfony                 Zephir
CommonLisp              ExpressionEngine        Jboss                   Nim                     R                       SymphonyCMS

=== Global ===

Anjuta                  Dreamweaver             IPythonNotebook         LyX                     Ninja                   SublimeText             VirtualEnv
Archives                Eclipse                 JDeveloper              Matlab                  NotepadPP               SVN                     VisualStudioCode
BricxCC                 EiffelStudio            JetBrains               Mercurial               OSX                     SynopsysVCS             WebMethods
Calabash                Emacs                   Kate                    MicrosoftOffice         Otto                    Tags                    Windows
Cloud9                  Ensime                  KDevelop4               ModelSim                Redcar                  TextMate                Xcode
CodeKit                 Espresso                Lazarus                 Momentics               Redis                   TortoiseGit             XilinxISE
CVS                     FlexBuilder             LibreOffice             MonoDevelop             SBT                     Vagrant
DartEditor              GPG                     Linux                   NetBeans                SlickEdit               Vim

# Python の場合
$ gibo python
### https://raw.github.com/github/gitignore/c844436111744d996ed453843d85125bab22af32/python.gitignore

# Byte-compiled / optimized / DLL files
__pycache__/
*.py[cod]
*$py.class

# C extensions
*.so

# Distribution / packaging
.Python
env/
build/
develop-eggs/
dist/
downloads/
eggs/
.eggs/
lib/
lib64/
parts/
sdist/
var/
*.egg-info/
.installed.cfg
*.egg

# PyInstaller
#  Usually these files are written by a python script from a template
#  before PyInstaller builds the exe, so as to inject date/other infos into it.
*.manifest
*.spec

# Installer logs
pip-log.txt
pip-delete-this-directory.txt

# Unit test / coverage reports
htmlcov/
.tox/
.coverage
.coverage.*
.cache
nosetests.xml
coverage.xml
*,cover
.hypothesis/

# Translations
*.mo
*.pot

# Django stuff:
*.log
local_settings.py

# Flask instance folder
instance/

# Sphinx documentation
docs/_build/

# PyBuilder
target/

# IPython Notebook
.ipynb_checkpoints

# pyenv
.python-version

結果は標準出力されるので、> .gitignore などのようにファイルに出力するようにする。

$ gibo python > .gitignore


propen

現在いるブランチの Pull Request を開く。

(参考)

インストール

インストールするものではなく、.bashrc.zshrc にコマンドを記述する。

(.zshrc の場合)

propen() {
  local current_branch_name=$(git symbolic-ref --short HEAD | xargs perl -MURI::Escape -e 'print uri_escape($ARGV[0]);')
  hub browse -- pull/${current_branch_name}
}
使い方

GitHub で管理しているディレクトリ内で

$ propen

を実行する。

Google Apps ScriptでOAuth2を使う(GitHubのissueを出力)

ということをやってみた。
最低限の機能しか実装できてないが、一応動くものができたので公開&設定手順をメモ。

https://github.com/zaki-yama/gas-github-issue-export

目次

  • コード
  • 初期設定
  • 使い方
  • TODO
  • おわりに
  • リファレンス
続きを読む

1台のPCで複数のGitHubアカウントを使う(SSHとhttps)

会社の PC を使っていると、普段は会社用の GitHub アカウントで作業をするが
ちょっとしたコードなどをたまに個人の GitHub リポジトリに保存したい時があり、その時はコミットも個人のアカウントで行いたい。
そういった感じで1台の PC で複数の GitHub アカウントを切り替えて使うための設定手順。

SSH を使った方法はググると記事がいくつか見つかるんだけど https の方はなかったのでメモ。

前提として、メインで使うアカウントについては
すでにSSH鍵の登録や git config --global でユーザー名、メールアドレスなどの設定が済んでいるものとします。

TL;DR

  1. SSH の場合
  2. https の場合
    • (なければ)git credential-osxkeychain をインストールする
    • git config --global credential.helper osxkeychain を設定する
    • 以下、各リポジトリ
      • https://github.com:~ 形式の URL で clone や remote add する
      • git config user.name/user.email でサブアカウントのユーザ名・メールアドレスを設定
続きを読む

GitHubの画像貼り付けでサイズを指定する方法

GitHub の Issue にスマホのキャプチャ画像を貼付けたりする時、 そのままドラッグして貼付けると必要以上に大きく表示されて困った。

f:id:dackdive:20150508102142p:plain

サイズ指定して貼付ける方法あるかなと思って調べてみたらここに書いてあった。

html - Resize image in the wiki of GitHub using Markdown - Stack Overflow

画像をドラッグ&ドロップして貼付けた時の記法は

![***代替テキスト***](***画像のURL***)

だが、これを <img> タグを使った方法に変更する。

<img src="***画像のURL***" width="***サイズ***">

試しに先ほどの画像で width="320px" を指定すると

f:id:dackdive:20150508104814p:plain

サイトの右上にGitHubへのラベルを表示する方法 - "Fork me on GitHub" Ribbon

たまにサイト見てると、右上に "Fork me on GitHub" って書かれたラベルがついていて
クリックすると GitHub のレポジトリに飛んでソースコードが確認できるものがある。

f:id:dackdive:20150405001637p:plain

(キャプチャは自分の Polymer チュートリアルアプリに設置したもの。
コードは https://github.com/zaki-yama/gae-polymer から見られます)

これやってみたいなと思って調べてみた。
Fork me on GitHub Ribbon とか単に GitHub Ribbon とか呼ぶらしい。

せっかくなので Polymer のカスタムエレメントとして作ってみた。

続きを読む

[Heroku]GitHubと連携するgithub-syncを使ってみた

Twitter のタイムラインで Heroku のこんな機能を知り、どんなもんか触ってみました。

はじめに

本機能は 2014/11/27 現在 WIP (work in progress) だそうです。
上のリンクも Last Updated が 2014/11/25 なのでかなり最近公開された機能なのかな...

※※2014/11/28 追記※※
最後の方にも書きましたが、まだ全てのユーザーに対して有効になってはいないようです。
聞くところによると、まだベータなんで招待されないと使えないようですね。

機能を有効にしてみる

それでは、上記のリンクを参考にまずは機能を有効にします。 ローカルで以下のコマンドを実行

$ heroku labs:enable github-sync

すると、以下のようなメッセージが表示され、機能が有効化されます。

Enabling github-sync for ********@gmail.com... done
WARNING: This feature is experimental and may change or be removed without notice.
For more information see: https://devcenter.heroku.com/articles/github-sync

ここでも「この機能はまだ experimental だよ」という警告が出ます。
ちなみに、

$ heroku labs

というコマンドを実行すると

=== User Features (********@gmail.com)
[+] github-sync  Allow users to set up automatic GitHub deployments from Dashboard
[ ] pipelines    Pipelines adds experimental support for deploying changes between applications with a shared code base.

=== App Features (lit-peak-8002)
[+] http-dyno-logs       Enable HTTP dyno logs using log-shuttle [alpha]
[ ] log-runtime-metrics  Emit dyno resource usage information into app logs

というように、現在の設定が確認できます。

機能を使ってみる

早速、github-sync を使ってみます。
GitHub と連携するということで、適当な GitHub リポジトリを用意します。

https://github.com/zaki-yama/heroku_github-sync

Heroku のダッシュボード にアクセスし、どれでもいいのでアプリケーションを選択します。

「Code」を選択すると、真ん中に GitHub の項目があります。

f:id:dackdive:20141128004303p:plain

リポジトリを入力して、「Connect」をクリックすると...

f:id:dackdive:20141128004739p:plain

GitHubリポジトリと連携できました!

で、どうやら機能としては3つあるようです。
上から順にどんなことができるかさらっと見ていきます。

機能①: Deploy a GitHub branch

そのまんまの意味で、「Deploy Branch」ボタンを押すと選択したブランチが Heroku にデプロイされるっぽいです。
単に master ブランチでなく、プルダウンで対象を選択できるのがいいですね。

機能②: Enable automatic deploys from GitHub

ブランチを選択してこの機能を有効にしておくと、push されるたびにその内容が自動的に Heroku にもデプロイされるようです。

機能③: Enable automatic deploys of GitHub Pull Requests

GitHub 上で Pull Request を作成するたびに、Heroku 上で自動的に新たにアプリケーションを作成し、以後は Pull Request に push した内容がそっちのアプリケーションに自動で反映されるようです。

すげえ!!

機能③はまだ使えない...?

で、一通り試してみたんですが、私のアカウントではどういうわけか機能③だけうまくいきませんでした。

f:id:dackdive:20141128013713p:plain

こちらのように、PR 作成時にメッセージが表示されるようになったんですが、「deploy」のリンクをクリックすると...

f:id:dackdive:20141128013809p:plain

というように、アプリ自体は作成されていないようでした。

で、記事の一番最初の注意書きをもう一度読み返すと...

This article is a work in progress, or documents a feature that is not yet released to all users. This article is unlisted. Only those with the link can access it.

not yet released to all users なので、まだなのかな...

とはいえ、プルリク作成時に検証環境が自動的に用意されるようになったら
とんでもなく便利ですよね。
Google App Engine でも似たようなことができないものか。。。

[Salesforce]Apexコールアウトを利用して、ケース登録時にGitHubのIssueにも登録する

Apexから外部サービスを利用するための方法としてApexコールアウトというのがあります。
今回はこれを使って、GitHubと連携するサンプルを作ってみたという話。
Salesforceでケースが新規作成された時に、指定したGitHubリポジトリにIssueも登録されるというもの。

使用したGitHub APIのバージョンはv3です。

(2014/06/23追記)
すごく基本的なところを勘違いしていたんですが、
HttpRequestで外部サービスを利用するだけならApexコールアウトじゃなくていい んですね。
以下は、トリガから呼ばれる場合など、非同期処理として実行する場合 だと考えてください。
(参考)

リストにカスタムボタンを設置しておいて、押したら外部サービスのREST APIを実行して...とかであれば
普通のクラス内でHttpRequest使えばいいです。

ポイント

  • 連携する外部サービスのURLは「リモートサイトの設定」で設定しておく
  • (追記:トリガの場合は) Apexコールアウトを実装するメソッドには
    @future (callout=true)アノテーションをつけ、メソッドはstaticにする

  • @futureアノテーションをつけたメソッドは引数にプリミティブ型(またはプリミティブ型の配列やコレクション)しか渡せない
    SObjectObjectを渡すことができない)

ソースコード

GitHubに公開してあります。

https://github.com/zaki-yama/force_com/tree/master/case2issue

続きを読む