【覚書】GitHubで公開されているOSSに参加するときに使うgitコマンドとか

コマンドラインを親の仇のように憎んでいるんだけど気まぐれでローカル開発環境をめちゃくちゃにした結果コマンドラインから操作する方が安全 みたいな状態になったのでメモ

書いている人間はgitについてスライムくらいの知識しかないのでもっとスマートなやり方があるかもしれないし、なんならコマンドに間違いがあるかもしれない

前提

github.com

OSSプロジェクトの例として「艦これウィジェット」を用いる。先月末「艦これ」が二期を迎え、「艦これウィジェット」では以下のようにブランチを分けて開発をしています。

  • developブランチでv2の不具合修正
  • v3/developブランチでv3の開発

Special Thanks: id:otiai10

このエントリでは基本的にv3の開発をする場合のコマンドをメモしています。
またコマンド中のGitHubユーザー名は「wifeofvillon」、リポジトリ名やブランチ名も執筆時点で実在するものを使用しています。

リポジトリのfork

f:id:wifeofvillon:20180925124108p:plain

「fork」ボタンを押すと自分のGitHubアカウントにforkできる

forkしたリポジトリをclone

# GitHubからリポジトリをclone
$ git clone git@github.com:wifeofvillon/kanColleWidget.git

対象プロジェクトはnpmでパッケージ管理されているので、ローカルで動作確認をする場合はv2/v3それぞれのReadmeに従ってnpmコマンドを実行する

ローカルでブランチを切る

# branchの確認
$ git branch -a

# v3/developに変更を加え(るためにbranchを切り)たい
$ git checkout v3/develop

# v3/developからブランチを切る
$ git branch
$ git checkout -b fix-screenshot-button

対象プロジェクトでは手を加えたい場合(v3/)developブランチに対してPull requestを送ることになっているので(v3/)developからfix/featureのためのbranchを切る

ローカルブランチをリモート(GitHub)にPushする

# branchの確認
$ git branch -a

# 変更の確認
$ git status
$ git show

# リモートへpush
$ git push origin HEAD

commitは割愛

fork元リポジトリの変更を反映する

fork元リポジトリもガンガン変更されていくのでpullしなきゃいけないんだけど、毎回merge commitが発生して気持ち悪かったのでTwitterで訊いたら丁寧に教えてもらえた(本当にありがとうございます

# ベースになるブランチに移動
$ git checkout v3/develop

# fork元の当該ブランチをpull
$ git pull otiai10 v3/develop

# 変更を確認
$ git status
$ git show

tl;dr

二段階認証を有効にしている場合

この辺を設定すると楽

wifeofvillon.hatenablog.com

GitHub Desktopとキーチェーンアクセス

今更なんでgit commandを叩いているかというとMacにログインしているApple IDを変更したらキーチェーンアクセスにGitHub Desktopがアクセスできなくなって延々パスワードを訊かれたからです。気まぐれ(じゃなくて理由はあるんだけど)でそういうことはしないようにしよう!

GitHub実践入門 ~Pull Requestによる開発の変革 (WEB+DB PRESS plus)

GitHub実践入門 ~Pull Requestによる開発の変革 (WEB+DB PRESS plus)

ソフトウェアデザイン 2018年10月号

ソフトウェアデザイン 2018年10月号

GitHubのアクセストークンを(Terminalを開かずに).netrcに登録する方法

Terminalを使用しないで二段階認証を使用しているGitHubアカウントのアクセストークン設定に関するメモ

Note: この記事はSettings for GitHub 2-steps Verification on Mac (without Using Terminal!)を日本語訳したものです

このエントリはTerminalに慣れていない人向けに

を使ってやってみた手順をまとめたものです。

Atomを使っていますが.から始まるファイルを扱えるものであれば他のエディタでもできると思います。)

参考

qiita.com

qiita.com

概要

  1. GitHubのPersonal access tokenを取得する
  2. ホームディレクトリに.netrcファイルを作成する

GitHubのPersonal access tokenを取得する

まず、github.com[Settings] > [Developer settings]> [Personal access tokens]からアクセストークンを取得します。1

f:id:wifeofvillon:20180831153335p:plain

[Generate new token]をクリックすると、トークン取得画面が表示されます。トークンの用途を入力して使用する権限にチェックを入れてください。

f:id:wifeofvillon:20180831153339p:plain

ページ下部にある[Generate token]をクリックすると前の画面に戻って新しいトークンが追加されています。次のステップでこのトークンを使用します。

f:id:wifeofvillon:20180831153344p:plain

.netrcファイルをホームディレクトリに作成する

次に、ホームディレクトリに.netrcファイルを作成(既に存在する場合は追記)します。

テキストエディタを開き、新しいファイルを作成して/Users/{your_name}/.netrcとして保存します。
Atomの場合それがシステムファイルであることを警告しますが同意して次に進みます。

以下のおまじないをコピペして{ }部分を適宜書き換えて上書き保存します。

machine github.com
login {your_github_account}
password {your_github_personal_access_token}
protocol https

これでプロジェクトリポジトリにプッシュできるようになります。
私が試したときは設定を反映するためにGitHub Desktopをリスタートする必要がありました。

tl;dr

パスが通ってるエディタであれば

$ atom ~/.netrc

みたいにやると早い。

GitHub実践入門 ~Pull Requestによる開発の変革 (WEB+DB PRESS plus)

GitHub実践入門 ~Pull Requestによる開発の変革 (WEB+DB PRESS plus)

リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック (Theory in practice)

リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック (Theory in practice)

ニトリネットのオーダー詳細情報を要約して表示するJavaScript

ニトリネットのオーダー詳細情報の情報をスクロールせずに取得するJavaScriptを書いた。

www.nitori-net.jp

consoleから実行すると画像のようにJSONを書き込んだtextarea要素をページトップに挿入する。

f:id:wifeofvillon:20180811164212p:plain

usage

  1. コードをコピペする
  2. ブラウザの開発者ツールのconsoleにコピペして実行する

自分で使う分にはJSON形式で取れればよかったので連想配列JSON形式で吐いてるだけなんだけど、TSVとかにパースするとそのままGoogleスプレッドシートとかに貼れて便利だと思う。

code

{
  let data = {
    date:   '1970/01/01',
    count:  0,
    items:  [],
    price:  0,
    tax:    0
  };

  // 日付
  data.date = $('.dispOrderInfo > p:eq(1)').text().match(/[0-9]{4}\/[0-9]{2}\/[0-9]{2}/)[0];

  // 個数
  data.count = $('.item_area').size();

  // アイテム詳細
  for(var i = 0; i < data.count; i++){
    let item = {
      title: '', count: 1, price: 0
    };

    // アイテム名
    item.title = $(`.item_area:eq(${i}) .item_spec_details > a`).text();

    // 単価(税抜)
    item.price = $(`.item_area:eq(${i}) .item_info_area .order_item_info:eq(0) > dl:eq(0) .price`).text().replace(/(円|,|\s)/g,'');

    // 個数
    item.count = $(`.item_area:eq(${i}) .item_info_area .order_item_info:eq(0) > dl:eq(1) .item-quantity`).text().replace(/\s+/g,'');

    data.items.push(item);
  }

  // 商品金額合計(税別)
  data.price = $('#total_figures_totalProductPrice').text().replace(/[円|,|\s]+/g,'');

  // 消費税
  data.tax = $('#total_figures_tax').text().replace(/[円|,|\s]+/g,'');

  // JSON書き出し
  $('.main_content').prepend(`<textarea style="width:800px; height:128px;">${JSON.stringify(data)}</textarea>`)
}

TL;DR

引っ越しに伴い大量の注文をしたため、それを別帳簿に写すときにスクロールがだるいという動機で書きました。
for文の書き方を忘れたり正規表現の書き方を忘れたりしていたので普通にコピペした方が速かったなと思いました。
ニトリネットがjQueryを使っているのでそれを使用しています。
もしニトリネット担当者の方がこの記事を見たら注文データのCSVダウンロード機能をつけてもらえると最高だなと思います。

GitリポジトリからiOSアプリを構築する方法(QA担当者用)

※Mediumの以下のエントリの日本語版です

medium.com

このエントリはQAスタッフやテスターがGit(GitHubリポジトリからiOSアプリケーションを作成する方法についてのメモです。この記事では、次のことを想定しています。

  • 読者はiOSアプリケーション開発者ではない
  • (エミュレータでなく)実機でテストをする必要がある
  • 読者は自身のAppleアカウントを持っている
  • チームの管理者(開発者やリーダーなど)にプロジェクトに読者を追加するよう依頼することができる
  • チームのGit(GitHub)リポジトリにアクセスしてコンピュータに複製する権限および手段がある
  • スケジュールがとてもヤバく、他の望ましい方法を取る時間がない(例:TestFlight、DeployGate)

TestFlight - Apple Developer 

DeployGate - Distribute your beta apps instantly

上記に加えて、以下の経験があるとわかりやすいかもしれないです。

  • ADBコマンドでAndroid apkを端末にインストールしたことがある
  • なんでもいいのでIDEを使用したことがある

Steps

  1. Appleアカウントをデベロッパーアカウントに登録する
  2. チームの管理者にあなたをメンバーとして招待するよう依頼する
  3. Xcodeをインストールする
  4. XcodeでGitリポジトリをクローンする
  5. XcodeAppleアカウントを設定する
  6. Appleバイスをコンピュータに接続してアプリをビルドする

1. Appleアカウントをデベロッパーアカウントに登録する

まず、Apple Developerアカウントを取得する必要があります。 AppleアカウントをApple Developerアカウントとして登録することができます。

2. チーム管理者にあなたをメンバーとして招待するように依頼する

次に、あなたのチーム開発者にあなたをApple Developer [People]のメンバーとして招待するように依頼してください。プロジェクトにあなたのEメールアドレスを追加した後、招待メールが送信されます。

3. Xcodeをインストールする

Xcodeをダウンロードしてインストールします。 Xcode Betaを使用する必要がない場合は、App Storeから(通常の)Xcodeを入手できます。

※日本語版注:以下のスクリーンショットにはXcode Betaのものも含まれます

4. XcodeでGitリポジトリをクローンする

最初にXcodeを起動すると、Xcodeは以下のようなビューを表示します。 "Clone an existing project"をクリックすると、Xcodeは新しいウィンドウを開きます。 GitリポジトリのURLを入力したら、ソースファイルを取得してプロジェクトを開くことができます。

f:id:wifeofvillon:20180804231325p:plain

f:id:wifeofvillon:20180804231419p:plain

5. XcodeAppleアカウントを設定する

Xcodeであなたのチームプロジェクトを開けるようになったと思いますが、プロジェクトによっては警告が表示されるかもしれません。左ペインの上部にある左のフォルダアイコンをクリックしてプロジェクトディレクトリを開きます。

[Add Account...]をクリックし、Apple IDを入力して[Accounts]画面を開きます。それでも警告が残っている場合は開発者に確認してください。

f:id:wifeofvillon:20180804231730p:plain

f:id:wifeofvillon:20180804231751p:plain

f:id:wifeofvillon:20180804231807p:plain

f:id:wifeofvillon:20180804231821p:plain

6. Appleバイスをコンピュータに接続してアプリをビルドする

これで、元々用意されているエミュレータや実際のAppleバイスでアプリを実行できます。デバイスをコンピュータに接続して選択し、三角(再生?実行?)のボタンをクリックします。 (中央のテキストエリアでビルドの進捗状況を知ることができます)。

f:id:wifeofvillon:20180804232029p:plain

その後、git-pullで最新のソースをビルドして試すことができます。 (私の場合は、GitHub Desktopを使ってリポジトリを管理しています。使い慣れた方法で試してみてください。)

Ex. 実行中のログを取得する

Xcodeを使用してデバイス上で実行されているアプリケーションのログファイルを読むことができます。ツールバーの[Window] - [Devices]を開き、[View Device Logs]をクリックします。

f:id:wifeofvillon:20180804232124p:plain

f:id:wifeofvillon:20180804232127p:plain

TL; DR

QAをするなら断然TestFlightやDeployGateで配布されたアプリを使う方がいいので、もちろんこれは最後の手段なんですけど、このエントリを読んでいるということはもうスケジュールがやばいということだと思います。頑張ってください。

参照記事

Android端末でGoogle Play開発者サービスのアップデートをアンインストールする方法

Google Play開発者サービスのアップデートをアンインストールする方法(工場出荷時のバージョンに置き換える方法)について説明しています。

medium.com

Google Play開発者サービスについて

Google Play開発者サービスは、Androidアプリが使用するコア機能のいくつかをサポートするもので別に開発者向け機能というわけではありません。古いバージョンを使用しているユーザーもいるかもしれないのでアプリ内でチェックする必要があります。

古いバージョンでのアプリの挙動を確認したい場合は、開発者サービスのアップデートを削除=アプリを出荷時状態まで戻すことで近い状態にすることができます。

ただ、上で述べた通りいろいろなアプリが開発者サービス内の機能に依存しているので、アップデートのアンインストール後にエラーが発生することが想定されます。

Google Play開発者サービスのアップデート削除方法

  1. 「設定」>「アプリ」>「Google Play開発者サービス」を開く
  2. 「アップデートのアンインストール」をタップする
  3. システムメッセージに同意する

f:id:wifeofvillon:20180621123339p:plainf:id:wifeofvillon:20180621123335p:plainf:id:wifeofvillon:20180621123329p:plain
アップデートのアンインストール手順(Galaxy S4, Lollipop)

Tips

  • このフローは一部のアプリによって中断されることがある。(例:Androidバイスマネージャ、Google Pay)この場合、これらのアプリを無効にした後にアンインストールを実行できる。(手での有効化必須)
  • 日本語だと「Google Play開発者サービス」だけど英語での正式名称はGoogle Play services
  • Marshmallow以降では右上のケバブをタップするとアップデートのアンインストールが表示される。

f:id:wifeofvillon:20180621123325p:plain
アップデートのアンインストール(ZenFone4, Nougat)

Android改善プログラミング

Android改善プログラミング

Bluetooth機器がサポートしているプロファイルを調べる方法(Mac)

Note: このエントリはHow to Know That Your Bluetooth Device Supports Which Profiles (英語)を和訳したものです

半月くらいAndroidアプリのBluetooth接続に関する機能のテストをしていて、私物のBluetooth機器がサポートしているプロファイルを知りたいという状況になったので、MacBluetooth機器をペアリングして調べる方法を書いておきます。

f:id:wifeofvillon:20180615172743j:plain

Bluetoothのプロファイルについて

Bluetooth機器がサポートしているプロファイル」の意味がわかる人はこの部分を読まなくていいです(私自身が理解するのに時間がかかったので書いておきます)。

雑に言うと、Bluetooth機器は用途に応じて接続先の機器をコントロールします。ヘッドセットなら「音声を聴く」「音量を操作する」「マイクで音声入力をする」などです。

こういったコントロール方式=プロファイルが多く規定されていますが、その中には最終的な動作がカブっているものも多いです。上で挙げたヘッドセットの「音声を聴く」という機能に限定して言えば、大抵のヘッドセットはHSP (Headset Profile)をサポートしていますが、新しい機器であればそれに加えてA2DP (Advanced Audi​​o Distribution Profile)をサポートしていることがあります。

接続先となるアプリケーションの実装がプロファイルごとに異なる場合「古い機器で動かない」ということも起こり得ます。

参考:Traditional Profile Specifications | Bluetooth Technology Website

MacからBluetooth機器がサポートしているプロファイルを調べる方法

ここではMacOSのPCとBluetooth機器をペアリング設定した状態でサポートしているプロファイルを調べる方法を書いています。Windowsでもほとんど同じ手順で調べることができるようです。

参考:Bluetooth デバイス プロファイル サポートの詳細情報を得る方法

  1. Appleアイコンをクリック
  2. 「このMacについて」をクリック
  3. 「システムレポート」をクリック

f:id:wifeofvillon:20180615174816p:plain
「このMacについて」の「システムレポート」をクリック

システムレポートの「ハードウェア」の下に「Bluetooth」という項目があります。一番上が本体の仕様で、その下にペアリングされている機器の情報が並んでいます。

f:id:wifeofvillon:20180615175657p:plain
“FozentoFt1”がHFPHSPをサポートしているヘッドセットであることがわかる

もちろんそれぞれの機器のマニュアルを参照することがベストですが、イヤホンなど安価な小物の場合失くしやすいですしそもそも載っていないということもあるので、そういうときは試してみてください。

【Android】続・端末標準の電話機能でSIPを使う方法(受信・送信)【GalaxyS7】

この前Nexus5(とZenFone4)でのSIP電話の設定から通話までをまとめたが、Galaxy S7のSIP設定で2時間近く吹っ飛んだので書く。

これを読みにきた人はSamsungに対する何かそのような気持ちを募らせていることと思うが、とりあえずこの前書いたわりと標準的なAndroid端末での記事を読んでからこれを読んでほしい。

wifeofvillon.hatenablog.com

description

SMARTalkとかChiffonみたいなサードパーティアプリを使わず、050から始まる電話番号も使わず、Android端末Galaxy S7の電話機能でSIP電話を受ける・かける方法。

スクショはGalaxy S7 (Android 7.0)のものを掲載。

overview

  1. Android端末Galaxy S7SIPアカウントを割り当てる
  2. SIPアドレス宛てに電話をかける

Galaxy S7にSIPアカウントを割り当てる

ZenFone4は親切に、Nexus5も余計なことをせず見せてくれる通話アカウント画面だが、Galaxyシリーズの場合当該Activity(com.android.phone.settings.PhoneAccountSettingsActivity)を直接叩くことでやっと開ける。

特定のActivityとかServiceを直接起動するアプリはいくつかあるらしい。ここではQuickShortcutMakerを使った方法を紹介する。

play.google.com

  1. QuickShortcutMakerを起動する
  2. Phone(com.android.phone)を探す
  3. Phoneの中のPhoneAccountSettingsActivity(com.android.phone.settings.PhoneAccountSettingsActivity)を探す
  4. tryをタップしてActivityを開く

当該Activityを選択→実行→(直接開けるActivityであれば)Activityを開く

あとは他のAndroid端末と同じ(多分)

参考サイト(英語)

brouken.com

forums.androidcentral.com

SIPアドレス宛てに電話をかける

他のAndroid端末だと「連絡先(Contacts)」のカードに「SIP」という欄があって、そこからSIP電話をかけることができるんだけどGalaxyシリーズはそれがない。ではどうするかというと普通に電話番号欄にuser@example.comみたいな文字列を登録する

で、それをやろうとすると入力制限(数字記号のみ)に引っかかるので、

  1. コピペするか
  2. 向こうからかけてもらって登録する

みたいな対応が必要になる。

tl;dr

Samsungの「どうしてもSIPを簡単に使わせたくない」という気持ちが垣間見える。つらい。