気軽に楽しくプログラムと遊ぶ

自分が興味があってためになるかもって思う情報を提供しています。

Git 修正コミットを一つにまとめてマージ

git rebase -i でできるコミットまとめをmergeするときにやるには以下のコマンドを使います。

git merge --squash staging
git merge --squash --allow-unrelated-histories staging # 紐づきがない履歴はマージできないと怒られたらこっち
  • 注意点
    • 初期コミットがないと怒られるので、2つ目以降のコミットとしてマージする
    • 紐づきがないブランチをマージするとマージしているけど、リビジョンの線が切れて表示される。もしかしたら、あまり推奨されない方法かもしれません。。

Git ローカルブランチ、リモートブランチの削除

ブランチ削除コマンド、毎回調べている気がするので備忘録のために残しておきます。

ローカルブランチ

# ブランチ一覧を表示する
git branch
master
foo
bar

# ローカルブランチ削除
git branch --delete foo

# マージ確認なしで削除する
% git branch -D foo

リモートブランチ

# リモートブランチの一覧を表示する
git branch --remote
origin/HEAD -> origin/master
origin/foo
origin/bar

# リモートブランチ削除 その1
git push --delete origin foo

# リモートブランチ削除 その2
git push origin :foo

削除済みリモートブランチをローカルに反映

自分や他人が削除したリモートブランチをローカルに反映する。 ローカル上では、以下コマンドを実行しないとリモートブランチは残り続ける

# 手動反映
git fetch -p

# 自動反映する設定を行う
git config --global fetch.prune true

日常作業を効率化 Googleサービス、Qiita

ちょっとした不便を見逃さず、効率化していくと
仕事が爆速化していく。

仕事で使えるちょっとした工夫を書いていきます。

Googleカレンダー

Googleカレンダーの表示切り替えもマウス使ってられません。
ショートカットを覚えてサクサク情報収集していきたいですね。

特に、複数人のカレンダーを参照している人は、日別と週別の切り替えは多用すると思います。

「Shift + /」でショートカットキー一覧が表示

■移動系
・前の期間:「p」(past)or k
・次の期間:「n」(next)or j
・今日:「t」(today)

■ビュー切り替え系
・日単位ビュー:「d」(day)
・週単位ビュー:「w」(week)
・月単位ビュー:「m」(month)

引用元
https://qiita.com/s_yaginuma/items/7cc6e4bedc9f30081e08

Gmail検索

サクッと対象メールを見つける「検索演算子

実際に使っていて便利なものだけを記載しておきます。

カテゴリ フィルタ 検索対象 使い方
システム subject: タイトル
in:chats googleハングアウト
開封状態 is:unread 未読メール
送受信時期 after: 送受信後の日付 after:2019/01/01
before: 送受信前の日付 before:2019/01/01

未読メールが複数ページに渡って大量に溜まっているとき一括で既読にするには、
is:unreadで未読メールを特定して、検索窓下のメニューよりすべて既読を選択すると一括既読にできるのはめちゃくちゃ便利です。

Qiita

chromeの検索ブラウザ設定で キーワードに「@qii」など登録しておくと
いちいちサイト検索&アクセス後でのサイト内検索が不要。

既定の検索エンジンを設定する - パソコン - Google Chrome ヘルプ

キーボードショートカット

キーボードショートカット 効果 使える場所
⌘ + E 投稿編集ページへ飛ぶ 記事ページ
⌘ + S 記事を一時保存 記事の編集中
⌘ + Enter 記事を保存 or コメントを投稿 記事 or コメントの編集中
(記事は現在の "WIP" or "Ship It" の状態を引き継いで保存します)
J, K (同じカテゴリ内の)前の記事/次の記事 記事詳細ページ
/ 検索formにfocus どこでも

Mavenプラグイン調査

maven-source-plugin

概要

Maven centralにアップされていないライブラリに対して、ソースを紐付けることができるプラグイン

  1. 具体的には、xxx-source.jarを作成し、ローカルリポジトリ(.m2配下)に登録。
  2. maven eclipse pluginを使って、Eclipseの.projectファイルを生成させた際に、ライブラリに対してソースを紐付ける

設定方法

pom.xmlに、maven pluginの設定追加を行います。
Maven3系かつ、JDK7以上である必要があります。

pom.xml

  <build>
      <plugins>
        <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-source-plugin</artifactId>
        <executions>
            <execution>
                <id>attach-sources</id>
                <goals>
                    <goal>jar</goal>
                </goals>
            </execution>
        </executions>
       </plugin>
     </plugins>
  </build>

pluginをインストールし、ソース・ファイルが生成される状態とし、同時にxxx-source.jarもローカルリポジトリに登録します。

mvn install

maven eclipse pluginを利用して、Eclipseの.projectファイルを生成した際に、ライブラリとソースを紐付けます。

mvn -DdownloadSources eclipse:eclipse

Maven設定(Javaバージョン指定、複数プロジェクト管理)

Maven設定は、ライブラリの依存関係追加ぐらいしか、触ることがなかったが必要が
設定構成がイマイチなプロジェクトを見直す必要が出てきたので、よくわかっていなかった設定について
いくつかまとめてみます。

環境

  • Java 1.6と1.8が混在
  • Maven 3.6.1
  • Eclipse 4.8 Photon
  • 複数プロジェクトが存在し、依存関係あり

1. Javaバージョン指定方法

Mavenコンパイル時や実行時のJavaバージョンの指定が可能です。
Mavenで指定すると、Eclipse側のビルドパスよりも設定が優先されます。

Javaバージョンの指定は、JAVA_HOMEバージョンとmaven-compiler-pluginで指定するJavaバージョンは合わせる必要があります。
もし、異なる場合は、JAVA_HOME指定バージョンの方が新しい状態にしておく必要がありそうです。

pom.xml pluginタグで指定

<plugins>
  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <configuration>
      <source>1.8</source>
      <target>1.8</target>
    </configuration>
  </plugin>
<plugins>

Maven3系であれば、maven-compiler-pluginのプロパティーで以下のように指定することもできます。

pom.xml propertiesタグで指定

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    <maven.compiler.target>1.8</maven.compiler.target>
    <maven.compiler.source>1.8</maven.compiler.source>
</properties>

Spring Bootで指定する場合は、以下になります。

pom.xml Spring Bootにおいて、propertiesタグで指定

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    <java.version>1.8</java.version>
    <failOnMissingWebXml>false</failOnMissingWebXml> <!-- web.xml省略時に出る警告を消す -->
</properties>

2. マルチモジュール・プロジェクトを管理する

互いに依存関係のあるプロジェクトを順番にビルドしてビルドモジュールを作成したい場合があります。
この時、自動ビルドでは予期した順にビルドされず、ビルドに失敗してしまいます。

この場合は、packagingをpomにしたビルド専用プロジェクトを用意することで、
意図した順序でビルドを実行できます。

test_webプロジェクトがtest_dbプロジェクトに依存している際に、test_db → test_webの順で
ビルドするようにpom.xmlに以下のように設定します。

pom.xml (test_pomプロジェクト)

<project>
  <modelVersion>4.0.0</modelVersion>
  <groupId>test_pom</groupId>
  <artifactId>test_pom</artifactId>
  <version>1.0.0-SNAPSHOT</version>
  <packaging>pom</packaging>

  <modules>
    <module>../test_db</module>
    <module>../test_web</module>
  </modules>
</project>

pom.xml (test_dbプロジェクト)

<project>
  <modelVersion>4.0.0</modelVersion>
  <groupId>test_db</groupId>
  <artifactId>test_db</artifactId>
  <version>1.0.0-SNAPSHOT</version>
  <packaging>jar</packaging>

  <parent>
    <groupId>test_pom</groupId>
    <artifactId>test_pom</artifactId>
    <version>1.0.0-SNAPSHOT</version>
  </parent>
</project>

pom.xml (test_webプロジェクト)

<project>
  <modelVersion>4.0.0</modelVersion>
  <groupId>test_web</groupId>
  <artifactId>test_web</artifactId>
  <version>1.0.0-SNAPSHOT</version>
  <packaging>jar</packaging>

  ...
  <dependencies>
   ...
   <dependency>
     <groupId>test_db</groupId>
     <artifactId>test_db</artifactId>
     <version>1.0.0-SNAPSHOT</version>
   </dependency>
   ...
  </dependencies>
  ...

  <parent>
    <groupId>test_pom</groupId>
    <artifactId>test_pom</artifactId>
    <version>1.0.0-SNAPSHOT</version>
  </parent>
</project>

Vagrantコマンド一覧

下記から使うものだけ、ピックアップして記載させて頂きました。 https://qiita.com/oreo3@github/items/4054a4120ccc249676d9

仮想マシンの操作

vagrant upで、boxから生成したイメージで仮想環境を起動します。
vagrant destroyで生成イメージを破棄。box自体は残ります。
削除する場合は、Box操作コマンドで削除します。

コマンド 説明
vagrant up 仮想マシンの起動。vagrantfileのあるディレクトリ内で実行
vagrant halt 仮想マシンの終了(シャットダウン)
vagrant suspend 仮想マシンの一時停止
vagrant reload ≒ halt & up
vagrant provision 仮想マシンは起動したままプロビジョニングのみ再度実行
vagrant destroy 仮想マシンの削除(boxは消えない)
vagrant status 仮想マシンのステータスを表示
vagrant global-status 仮想マシンの一覧(名前、ステータス、パス)
vagrant ssh 仮想マシンにログイン

Box操作

Boxは、イメージファイルを仮想環境に登録したもの。イメージの雛形。
vagrant packageで作成したboxで読み込むには、boxを追加する必要があります。
vagrant destroy破棄して、vagrant upすると前に追加したbox(デフォルト)が読み込まれることになります。

コマンド 説明
vagrant box list boxの一覧を表示
vagrant box add / boxの追加。ローカルのbox、URLから取得から取得
vagrant box remove / boxの削除
vagrant package box名 現在の仮想マシンをboxに。box名省略なら元のbox名 → これを元に vagrant box add box名 だけで同じ環境を構築できる

Snapshot操作

vagrant packageでのbox作成は時間がかかるため、環境作成で失敗したくない場合、Snapshotを作ることで 簡易的な一時バックアップを作成することができます。

コマンド 説明
vagrant snapshot save <スナップショット名> スナップショット作成
vagrant snapshot save <スナップショット名> [オプション] --provision 付けると強制的にプロビジョニング、--no-provision 付けると強制的にプロビジョニングさせない
vagrant snapshot restore <スナップショット名> スナップショット復元。--[no-]provisionはsaveと同じ
vagrant snapshot delete <スナップショット名> スナップショットの削除
vagrant snapshot list 名前付きスナップショットの一覧を表示

Vagrantコマンドのイメージ図

以下のサイトはコマンドのイメージが掴めます。
Vagrantコマンド一覧とかチートシートとか

ハッシュ化とは?

ハッシュ化は、システム内ではよく使われる処理ですが、
結局どういうものなのってところが説明できなかったので、少しまとめてみます。

概要

  • 固定長のランダムな値に変換すること
  • 暗号化とは異なり、不可逆な変換で、平文に戻すのは極めて困難
  • 同じ文字列であれば、同一のハッシュ値を生成することが可能
  • ファイル内容や長さ、ファイル名に関わらず短い固定長の文字列を生成できる

用途

  • ファイル改ざんチェック
  • パスワードのDB管理

ハッシュ化アルゴリズム

  • md5 (32桁) 攻撃性されることない範囲での同一性チェックには最適
  • SHA-1 (40桁) やや脆弱
  • SHA-2(SHA-256,SHA-512) (64桁、128桁) セキュリティ性は十分に高い
  • SHA-3 (64桁、128桁)
  • CRC32 (8桁) セキュリティ性は皆無。改ざんチェックやパスワードハッシュに使ってはいけない

生成ハッシュ値の桁数が少ないアルゴリズムでは、高いセキュリティを担保できないが、
セキュリティが求められない場合は、桁数が短いものを選んでも良い。
短すぎると重複してしまう可能性はあるので、その点は注意。

ハッシュ値生成ツール

実際にハッシュ値ってどんな値になるのかを確認したい場合は、以下で試してみるとわかりやすい。

SHA2/SHA1/MD5ハッシュ生成(Hash Generator)
https://tool-taro.com/hash/