LoginSignup
10
16

More than 5 years have passed since last update.

開発中つまずいたこととその対処色々

Last updated at Posted at 2016-09-01

はじめに

開発中大小様々なことで困るので困ったこととその対処

一覧

データ管理

データ入力者が慣れているのはExcel
以下の問題あり

  • git管理しにくい
    • 差分わかりにくい
    • マージしにくい
  • Validationチェック書くの面倒
    • いちいちVBAマクロ書く?
    • いい方法があるのかも
  • 結局はExcelからCSVなんなりでExportして使う

Google Spreadsheetもよく見かけるが、諸事情により外部サーバーに
データ置けなかったり速度問題があったり

入力しやすければなんでもいいけどWebなエディタ作るのもあれ。
以下構成がいい感じ?

  • MongoDB
    • JSONでデータ構築
    • GUIで要素編集できる
    • MongoDB Compassで柔軟にValidation Ruleかけそう
    • JSONはgit管理しやすい

ビルド時はMongoDB->JSON->FlatBufferして使うと思う。
UniRx作者作のZeroFormatterもよさげ

案なので実際にまだ試していない。

ビルド成果物管理

  • アセットから復元可能といえば可能だが、ビルドした時点成果物まんまがあるとよい
    • gitに保存すると、gitリポジトリサイズでえらいことになる
      • 初回チェックアウトでひどい目にあう

ファイルサーバーに日付で分けて保存したりしがちだけど
バックアップとか考え出すとめんどい。
amazon s3とかに置く方がいいと思う。

連絡手段

Slackが使いたくても使えない
RocketChatでいい感じ

Skypeダメだと思う

ファイルサーバーへCtrl+Vファイルコピーに時間がかかる

rsync -av --delete src dst

転送ファイル数が多いときファイルサーバーにExplorerでCtrl+Vすると泣くことがある。

Bash on Ubuntu on WindowsでWindowsも使える

windowsのgitGUI環境

  • SourceTree
    • 見やすい綺麗
    • 遅いしよくコマンド失敗する
    • terminalもよく失敗する。.lockで怒られまくり
      • mac版使ったら快適さの違いに驚く。windowsいじめ
  • 本家git
    • 速い安定
    • ちょっとGUI癖がある
  • gitkraken
    • おしゃれ開発活発使ったことない
    • 業務利用有償

git fetchすると毎回sshパスワードを聞かれる

git status叩くと大量の変更ファイルが出た。消したい。

  • 対処:git reset --hard HEAD

git status叩くと大量の未管理ファイルが出た。消したい。

  • 対処:git clean -fd

gitのログが汚い

mergeせず、rebaseで他の更新の後に自分の変更を置くと綺麗
rebaseしていいかはプロジェクト次第

  • 作業用ブランチ切る
  • 作業用ブランチで編集 git checkout feature/work
  • git fetch -pで更新情報取得
  • git checkout develop
  • git pullでdevelop更新
  • git checkout feature/workで作業用ブランチに移動
  • git rebase developで作業用フォルダの変更を他の変更の後に移す
  • git checkout develop
  • git merge --no-ff feature/workでdevelopに変更取り込み
  • git push origin developで変更を公開

特定のファイルだけフィルタリングして検索かけたい

  • findコマンド, xargコマンド, grepの組み合わせ
  • find -name *.hoge | xarg -i grep -H pattern "{}"

git on windowsのターミナルで叩くと妙に遅い気がする

ログ分析

Elasticsearch+kibanaがいい感じ。
Elasticsearchにログ入れてkibanaでグラフ化

開発初期からkibana使うことを見越してログフォーマットを決めておくとよさげ

WindowsでLinuxコマンド使いたい

ログファイルが更新されるたびにログファイルを開き直して見るのが面倒くさい

  • less -r で開いた後Shift+f同時押しでファイル更新待ち状態に入る
  • tail -f

スクリプトからXCodeプロジェクトをビルドしたい

  • xcodebuild -schema <schema-name>すればOK
    • .xcodeprojを指定したい場合はxcodebuild -project <xcodeproj-path>
  • schema-nameを知りたい場合はxcodebuild -showBuildSettings
  • 作業フォルダを変えたい場合はxcodebuild -derivedDataPath ${BUILD_DIR}
  • Code Sign errorのビルドエラーがでるときはxcodebuild叩く前にsecurity unlock-keychain -p <password>

ボット導入

ローカルネットワークならhubot一択

  • nvmインストール https://github.com/creationix/nvm
  • nvm ls-remoteでインストール可能なnode.jsのバージョン一覧取得
  • nvm install でnode.jsインストール
  • .bash_profileにsource ~/.nvm/nvm.shを書いておく
  • hubotインストール https://hubot.github.com/docs/
  • hubot-script.jsonを削除
  • external-scripts.jsonからheroicスクリプトを削除(設定しないとエラー出る)
  • ${HUBOT_DIR}/bin/hubotに各種環境変数exportを記載
  • ${HUBOT_DIR}/bin/hubotを実行して接続確認.
  • npm install -g foreverでデーモン補助ツールインストール
  • forever start -l hoge.log -c bash ${HUBOT_DIR}/bin/hubot -a slack

久々に触ったら、最新版(2016/6)はhubot-scripts.jsonを使わないらしい
Heroku連携スクリプトもデフォルトで入ってるので使わないなら消す

hubotとjenkins連携

PORTとか設定は${HUBOT_DIR}/bin/hubotにexport書いてる

ビルド

Rakeが使い易い。
RubyがインストールされていなくてもリポジトリにRumix2を入れておけば他メンバもなんとかなる

Ruby環境がまんま使えるのでYAML解析してなんたらとか楽。
アセットはXML形式データで依存ファイルが記述されてたりする。
OMakeでXMLパースやらなんやらやったときは死ぬかと思った。

Gradleも使いやすそう。最速はninja。
- Rakeで解析してninjaビルド設定出力
- ninjaでリビルド
がいいかも。ninjaはマジで速い

Rubyエディタ

なんだかんだでdd,yyが使いたくてvimに戻った
NetBeans+RubyかAtom+Ruby+RSenseが平和そう

vimで補完使うなら2017年時点では.vimrcにvim-pack向けに

Plug 'vim-ruby/vim-ruby'

してCtrl+x,Ctrl+oするとサクッと補完が使える。

vim+rubyで調べるとrsenseとかneocompleteとか色々出てきて宝探し

$ gem install rubocop

と.vimrcで

Plug 'vim-syntastic/syntastic'

で文法チェックもよさげ

Jenkins

  • コマンドプロンプトで動くのにJenkinsでこける
    • 環境変数がずれてるかも。Jenkins再起動で機嫌なおるかも
  • SCM CheckoutでPipelineスクリプト動かすとSandboxになって使いにくい
def hoge(){ 
  stage("fuga") {
    ...
  }
}
return this;

と外部ファイル化しておき、
Pipelineジョブで非Sandboxなジョブ直書きで

pipeline = load 'hoge.groovy'
pipeline.hoge()

と呼び出すと楽

  • Slaveで動作させるときでも環境変数は全てMaster側Jenkinsの設定が使われる
    • 最初Slaveマシン内でテストしたときとMasterからSlaveに仕事させたときで動作が違ってびびった
    • SlaveにJenkinsを入れる必要がない
    • Masterの環境が渡されるとSlaveで動かないときはSlaveにJenkins入れてHTTPリクエストでJobを発行するほうが楽
  • HTTPリクエストはParameterized Trigger Pluginで投げると終了まで監視出来て楽
    • 使う際はシステム設定で宛先URLを登録する
    • 宛先JenkinsのグローバルセキュリティでCRLFがあると動かない様子
    • 宛先Jenkinsログインでuser/passwordが必要ならHTTPリクエスト投げるときもAuthorize設定が必要
    • Pipelineから呼びたいときは一手間多いがHTTPを投げるジョブを用意すると楽
  • Pipelineジョブ
    • Pluginによってはgroovyからの呼び出し方が不明なものがいる
      • Plugin呼び出し用ジョブを作ってbuildで呼ぶと楽
    • Java関数importして使おうとするとセキュリティ例外が出る
      • Jenkins設定からいちいち関数実行許可を出さないとダメ
      • Java関数importして使うくらいならsh "rake task"とかsh呼び出し経由したほうが楽
    • stage 'hoge'は非推奨になったそうなのでstage('hoge){...}で
    • if(...){ stage(...){} }するとビルド履歴の表示が切れる。stage(){ if(){} }のほうがよさげ
    • env.LANG=ja_JP.UTF-8とか環境変数仕込みを忘れずに
    • 真偽値パラメータはgroovy上"true"/"false"と文字列で見える。
      • でもbuildに渡すときはtrue/falseと真偽値じゃないとだめ

ローカル環境なgithubが欲しい

  • gitlabが使いやすかった
  • golang製も出たらしい

設定ファイル

  • 最近はYAML推し。
    • コメントをかけるのがでかい。
    • JSONはコメントがかけない。JSONを使いたい場合はYAML->JSONに変換でいいと思う。変換ライブラリもいっぱいある
  • C++ならCSVがメモリ効率がよい
    • メモリに置いた後セパレータを¥0に置換すれば文字列取得できる

ツール作成

  • Golangがよさげ。けど有識者が少ないので導入してない。
  • Rubyもサクッと作れてよい。複数OSでも動かしやすい。慣れてる人も多い。
    • Rumixがいい感じ
    • たまにCygwin-Rubyと混ざって???となることがある。
  • Perlは人によって書き方の癖がすごかったりするのでおすすめしない。
    • 痛い目見る人が多かった。
  • exeはWinに縛られるのでよくない。
  • 大きなbatもメンテ性に欠ける。かといってファイル分割されても困る。
  • node.jsは環境変化が速くバージョン管理で痛い目見ることがある

設計あれこれ

  • コンポジットパターン大事超大事
    • 継承でクラスが肥大化すると誰かが勝手に基底クラスに処理追加したりして激おこ
    • 分離できるものは分離。
  • 非同期処理呼び出しで完了時コールバックを引数にとったら地獄の始まり
    • 完了時コールバックの完了時コールバックとかよくある
    • Unityでよくある非同期進捗クラスを返してIsDoneで見てから完了処理書くと平和
    • Reactive Programmingすごいっぽい
  • UIは表示と設定をクラスで分ける。
    • データ拾って設定とかモックで一緒くたに書きがち。毎回後で痛い目見る
    • ViewにUIのSetterとコールバック登録API
    • Viewの表示管理でUI設定とコールバック時の処理
    • これは最初からサボらずやる。

C#あれこれ

  • デバッグ用関数はSystem.Diagnostics.Conditionalをつける
    • 関数呼び出し部分を#if #endifでくくらなくてよくなる
    • Conditionalつけた関数のコンパイルは走るのでデバッグ用パラメータは#if #endifでくくらないとダメ
  • YAMLパーサー
  • コマンドラインオプションパーサー
  • Excel読み書き
    • ClosedXML
      • 使いやすいけど数式に弱い気がする
    • NPOI
      • 数式に強い気がする
    • ExcelのデータはJSON化しておいてExcelはただのエディタにするほうがバージョン管理とか共同編集とかマージとか平和になれそう
      • JSONスキーマ読んでJSON開いたら綺麗に表示とか
  • C#を行指定で開く
    • devenv.exe /Edit hoge.cs /command "Edit.Goto 100"
    • VS2015で試したら失敗。旧バージョンではこれ使えるらしい。
  • LINQ素晴らしい。負荷を気にしなくていい箇所ならガンガン使うべき
    • Whereで条件一致するものだけ取り出し
    • Selectで変換。ファイルパスからファイルストリームとか
    • SelectManyで変換結果が1対多になっても次段で1つずつ処理できる
      • SelectMany( ディレクトリパス => ディレクトリ内ファイルパス群 ).Select( ファイルパス => ファイルストリーム )とか

Unityあれこれ

長くなったので別ページにうつした
http://qiita.com/Oyayubi/items/c6d44b33276ba93d73a2

10
16
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
16