UGA Boxxx

つぶやきの延長のつもりで、知ったこと思ったこと書いてます

【Git】削除したファイルのログを確認する

今まで何でなかったのかが不思議だがGitで管理しているファイルを削除したときに、そのファイルをいつ消したのか、なぜ消したのかを調べるときにどうしたら良いのかがわからなかった

Gitコマンドでやる方法を知ったのでメモ

$ git log -- <ファイルPath>

単純にこれだけ

Git - git-log Documentation

【Java】Lombokでつくったインスタンスをcloneしたい

Lombokを使っていて、あるクラスに@BuilderをつけてBuilderパターンでインスタンス生成した

projectlombok.org

このインスタンスをcloneして、あるプロパティの値だけを上書きしたくなったので方法を調べた

@Builder(toBuilder = true)

@Builderアノテーション@Builder(toBuilder = true)にするだけでできるみたい

これによりtoBuilder()が使えるので、再度Builderの形に戻して、値をセットして、build()を実行する

@Builder(toBuilder = true)
public class Hotel {
  private String name;
}
Hotel hotel1 = Hotel.builder().name("ホテル1").build();
Hotel hotel2 = hotel1.toBuilder().name("ホテル2").build();

【GAE】App Engineのスタンダード環境がオープンソースになったらしい

Google Java App Engine Standardのスタンダード環境がオープンソースになったことを知った

cloud.google.com

App Engine Javaランタイムをオープンソース化することで、ローカル開発環境、オンプレなどでAppEngine環境を必要な場所で実行できるようにすることができる

ユーザーが特定のツール、環境、またはベンダーに縛られないようにし、他の場所でワークロードを実行する自由を与え、実際にコードを実行する方法を理解することができるようにするのが狙い

CloudTasksのモック化したかったので一瞬嬉しいとおもったが、そこはオープンソースになってなかったので残念

【Maven】<optional> true</optional>と<scope>provided</scope>の違い

あるライブラリに対して<optional> true</optional><scope>provided</scope>を両方設定しているモジュールがあり、どちらもユーザーが任意に使用することを意味するものだと思っていたので、両方を設定する意味の違いがわらなかったので調べた

optional= true

<optional> true</optional>はあるモジュール内の任意の機能だけで使いたいモジュールがある場合、その機能を使用しない限りクラスパス上に存在しないようにする設定

例えば5つの異なるデータベースタイプでライブラリを使用できるようにしておくが、通常は1つだけが必要な場合に、ライブラリに依存する依存関係をoptional= trueとしてマークしておき、ユーザーが実際に使用する依存関係を指定できるようにする場合などに使用する

scope=provided

<scope>provided</scope>コンパイル時にクラスパスに追加されるもので<optional> true</optional>とは似たような話だが意味的に違う

ランタイム環境ですでに提供されているためパッケージ化する必要がないことを意味する

例えば、Lombokなどはコンパイル時に使用したら、ランタイムでは必要ないライブラリである

こういうライブラリに対して設定を行う

つまり、以下の設定は「コンパイル時だけ必要だが、もし使ってないならクラスパスには追加しない」という設定ということがわかった

    <optional>true</optional>
    <scope>provided</scope>

【MapStruct】LombokとMapStructを同時に使う場合

LombokとMapStructを同時に使う場合に注意が必要といのを知った

Lombokよりも後に動くAnnotation Processorから、Lombokで自動生成されたBuilderが見えなくなっているとのこと

github.com

なのでpom.xmlで先にmapstruct-processorの依存を書いて、次にlombokの依存を書くと動く

    <dependency>
      <groupId>org.mapstruct</groupId>
      <artifactId>mapstruct-processor</artifactId>
      <scope>provided</scope>
      <optional>true</optional>
    </dependency>
    <dependency>
      <groupId>org.projectlombok</groupId>
      <artifactId>lombok</artifactId>
      <scope>provided</scope>
      <optional>true</optional>
    </dependency>

pom.xmlの記載順番に依存関係があるのは知らなかった

<optional>true</optional><scope>provided</scope>の違いがわからなかったので後日調べる

他参考

https://qiita.com/moaikids/items/d98118c2e84dcb543c24

https://qiita.com/poponuki/items/053bfb91191dc31ecac8

【Safari】word-breakとline-breakを同時に使うと表示崩れがおきる

次のようなグロナビをマークアップしている

このとき、ある理由でこのグロナビに対してword-break: break-allline-break: anywhereのスタイルをあてたら

Safariのみ次のように表示崩れがおこった

幅が狭くなりsvgposition: absoluteで右寄せにしているのが効かなくなって折り返している

Safariのみで起こる事象で、なんでこんなことになるかはわかっていないが

word-break: break-allline-break: anywhereを同時にあてるとこうなってしまう

実装は以下のような感じ

<style>
  .wrap {
      margin-top: 120px;
      word-break: break-all;
      color: #495361;
      line-break: anywhere;
  }
  .globalNav {
      display: flex;
      width: 980px;
      margin: auto;
      border: 1px solid;
  }
  .item {
     padding: 0 30px 0 15px;
     position: relative;
     border-right: 1px solid;
  }
  .icon {
    width: 5px;
    height: 8px;
    top: 50%;
    right: 15px;
    transform: translateY(-50%) rotate(90deg);
    position: absolute;
    fill: #4b9dff;
  }
</style>

<div class="wrap">
    <div class="globalNav">
        <div class="item">色から探す
            <svg class="icon">
                <use xlink:href="#icon_chevron"></use>
            </svg>
        </div>
        ...
    </div>
</div>

とりあえずChromeでテストをしていると気づかないので注意が必要