都内SEのプログラミング勉強と雑記

2008年より都内でSEをしてます。業務システムをリプレイスし続けてきました。ここでは主にjavaやその周辺技術関連を紹介予定。

git push origin ... ブランチ名なんだっけ?となったときのためのTips

f:id:object1985:20181002131746p:plain

git push origin HEAD

私はこれを使っています。

HEADはカレントブランチ名に置き換わります。

そのためGit Flowにおいて「作業ブランチ名なんだっけ?」となった際に意識せずpushできて楽です。

他に git push した際にどのブランチに対するpushか?のデフォルト動作を決められる

push.default 設定項目があります。

例えば以下のように設定します。

git config --global push.default current

上記で git push のみでカレントブランチ名でリモートにpushします。

current 部分は他に以下の値があります。

- nothing
    - git pushをしても何もしない。ブランチ名の指定が必要。
- current
    - カレントブランチと同じ名前のブランチにpushする。
- upstream
    - upstreamの設定をしたブランチにpushする。
- simple
    - Git 2.0からのデフォルト設定。upstreamを設定したブランチに対してpushするが、upstreamを設定がされ、かつローカルブランチとリモートブランチが同じ名前の場合のみpushする。
- matching
    - ローカルブランチとリモートブランチが同じ名前の場合、すべてpushする。

SESで仕事をすることが多く、PCをとっかえひっかえ作業するので結局 git push origin HEAD に落ち着きました。

(指が覚えてしまった)

JavaScriptでローカルファイルを取得するサンプル

JavaScriptでローカルファイルを取得する手軽な方法はないかな~、とぐぐってみました。

Webサーバを起動するのが一番だけど(令和のこの今も)ごく稀にネット環境がない状態で調査・解析することがあるので。

<!DOCTYPE html>
<html lang="ja">

<head>
   <meta charset="UTF-8">
   <script src="https://code.jquery.com/jquery-3.6.0.js"
        integrity="sha256-H+K7U5CnXl1h5ywQfKtSj8PCmoN9aaq30gDh27Xc0jk=" crossorigin="anonymous"></script>
</head>

<body>
    <script>
       window.onload = function () {
           $.ajax({
               type: "get",
               url: "test.json",
               dataType: "json",
               success: function (data) {
                   let text = "data.hoge:" + data.hoge;
                   text += ", data.responseText:" + data.responseText;
                   alert(text);
               },
               error: function () { alert("失敗"); }
           });
       };
   </script>
</body>

</html>
//test.jsonの中身は以下 この行は含めない。
{
    "hoge": "fuga",
    "responseText": "URLです。"
}

このような html , json を同じフォルダに置いて

"C:\Program Files\Google\Chrome\Application\chrome.exe" --allow-file-access-from-files といった記載でローカルファイルへのアクセスを許可してChrome立ち上げると以下のように取得できます。

f:id:object1985:20210825114937p:plain

え?jQueryCDNで使っている?そこはご愛敬・・・

2021年8月23日Zoomで障害発生?繋がらない。「このミーテイングはホストによって終了されました」

f:id:object1985:20210823181345p:plain

Zoomの有料ライセンスで作成したミーティングに参加できなくなりました。2021年8月23日17~18時頃。

「このミーテイングはホストによって終了されました」のメッセージが立ち上がりミーティングに入れない。

おかしいな~、と思っていたけどZoom側で障害が発生しているみたいです。

新規ミーティングを立ち上げようとしても同じエラー。

しかしなぜか個人アカウント(時間制限ありの方)だと新規ミーティング自体は立ち上げられた。

しばらく復旧を待つことに。

設定シートの情報で繰り返しブックを開き、全シートの値を元に新規ブック作成するVBAひな形

f:id:object1985:20210819031342p:plain 設定シートの情報で繰り返しブックを開き値編集しつつ新規ブック作成するひな形

Excelの新規ブックを開き、リボンの「開発 > Visual Basic」を開いて開発モジュールを挿入し以下のソースを張り付ける。

以下のソース内に記載しているが新規ブックのシート内に2点記載する。

  • インプットデータとするブックの絶対パス(複数可)
  • フォーマットとする読み込みブックの絶対パス
Sub 複数ブックを元に新規ブックを作成する例()

'読み込み開始位置の指定。本VBAを記載するブックのActiveSheetに設定として記載想定。
Dim v読込データブック開始行 As Integer
v読込データブック開始行 = 2
Const v読込データブック開始列 As Integer = 1
Const v読込フォーマットブック開始行 As Integer = 2
Const v読込フォーマットブック開始列 As Integer = 2
Dim vファイル名 As String
Dim vフォーマットファイル名 As String
Dim v対象データブック As Workbook
Dim v対象フォーマットブック As Workbook
Dim v新規ブック As Workbook
Dim v作成シートインデックス As Integer
v作成シートインデックス = 1

'以下読み込んだデータブックの定義
Dim vデータ開始行 As Integer
vデータ開始行 = 10
Const vデータ開始列 As Integer = 4

'以下作成するシートの定義
Dim v書き込みデータ開始行 As Integer
v書き込みデータ開始行 = 17
Dim v書き込みデータ列 As Integer
v書き込みデータ列 = 2

Dim v処理開始時間 As Single
v処理開始時間 = Timer

Debug.Print getNow() & "_処理開始"
Application.ScreenUpdating = False

'対象のブック指定が空行になるまで繰り返し処理
Do While Cells(v読込データブック開始行, v読込データブック開始列) <> ""
    vファイル名 = Cells(v読込データブック開始行, v読込データブック開始列)
    vフォーマットファイル名 = Cells(v読込フォーマットブック開始行, v読込フォーマットブック開始列)   '毎回読む必要はないのでDoWhileの外でも問題なし
    Set v対象データブック = Workbooks.Open(Filename:=vファイル名, ReadOnly:=True, UpdateLinks:=0)
    Debug.Print getNow() & "_" & v対象データブック.Name
    Set v対象フォーマットブック = Workbooks.Open(Filename:=vフォーマットファイル名, ReadOnly:=True, UpdateLinks:=0)
    Debug.Print getNow() & "_" & v対象フォーマットブック.Name

    '新規ブック作成
    Set v新規ブック = Workbooks.Add '新規ワークブックを作成

    '1シートづつ繰り返し処理する
    For Each i In v対象データブック.Sheets
        ' ======== 以下、編集処理を作りこみます ========
        '新規ワークブックのsheet1の前にひな形をコピー
        v対象フォーマットブック.Worksheets("sample").Copy before:=v新規ブック.Sheets(v新規ブック.Sheets.Count)
        v新規ブック.Sheets(v作成シートインデックス).Name = i.Name & "登録" 'シート名を変更
        
        Dim rowcount As Integer
        rowcount = 1
        Do
            If i.Cells(vデータ開始行, vデータ開始列).Value = "" Then
                Exit Do
            End If

            '以下例。要件により列も変数化したり複数列への値設定など変更する
            'v新規ブック.Sheets(v作成シートインデックス).Cells(v書き込みデータ開始行, 1) = i.Cells(vデータ開始行, vカラム論理名列).Value
            'v新規ブック.Sheets(v作成シートインデックス).Cells(v書き込みデータ開始行, 2) = i.Name

            vデータ開始行 = vデータ開始行 + 1
            v書き込みデータ開始行 = v書き込みデータ開始行 + 1
            rowcount = rowcount + 1
        Loop

        '次のシート処理のため制御変数を初期化等する
        vデータ開始行 = 10
        v書き込みデータ開始行 = 17
        rowcount = 1
        v作成シートインデックス = v作成シートインデックス + 1
    Next i
    ' 余分なSheet1シートを削除
    Application.DisplayAlerts = False ' メッセージを非表示
    v新規ブック.Sheets("Sheet1").Delete
    Application.DisplayAlerts = True ' メッセージを表示

    v対象データブック.Close SaveChanges:=False
    v対象フォーマットブック.Close SaveChanges:=False

    v読込データブック開始行 = v読込データブック開始行 + 1
    '複数ブック対応するときは以下をコメントアウト解除
    'v作成シートインデックス = 1
Loop

'新規ブックの保存処理はないため未保存で終了すると新規作成したブックは破棄されます
v新規ブック.Sheets(1).Select

Application.ScreenUpdating = True
Debug.Print getNow() & "_処理終了。所要時間は" & Round(Timer - v処理開始時間, 1) & "秒"
MsgBox getNow() & "_所要時間は" & Round(Timer - v処理開始時間, 1) & "秒_" & "抽出終了。作成シート数:" & (v作成シートインデックス - 1)

End Sub

'時刻表示
Function getNow()
    getNow = Format(Date, "yyyy_mm_dd") & "_" & Format(Hour(Time), "00") & ":" & Format(Minute(Time), "00") & ":" & Format(Second(Time), "00")
End Function

GitLabのリポジトリをGitHubへmirroring同期

f:id:object1985:20210818185226p:plain

かなり長いことGitLabでソース管理していました(といってもどれも中途半端&ほとんと触っていないですが・・・)

そんな状況で、各種のGitホスティングサービスと連携するサービスが大抵GitHub、GitLabが何かと連携するサービスはあまり目にしていません。

そこでタイトル通り、GitHubへと同期することにしました。

以下一例。

作成済みのGitLabリポジトリ( https://gitlab.com/tonaise/autoguitestsample )をGitHubへ同期する。

まずmirroring先のGitHubリポジトリを作成。GitLabと同じ名前としました。

f:id:object1985:20210818183544p:plain

Newボタンをポチ。

f:id:object1985:20210818183644p:plain

同じ名称のリポジトリ名と説明を記載(画像では作成後に同じ流れで画像をとったのでエラーになっています)

同期する際の認証tokenを取得。

事前に2要素認証を済ませておく => 2 要素認証を設定する - GitHub Docs

GitHub右上のアカウントアイコンをクリックしてメニューからSettingsへ

Developer settings > Personal access tokens の順にクリック

f:id:object1985:20210818184120p:plain

Generate new Tokenボタンを押す

f:id:object1985:20210818184210p:plain

何用かをNoteへ、期限を選択。正直1回同期されればGitHubへ移行を考えているので最小の7 daysでもよかったです。

後は権限(scopes)を選択。repoとworkflowとpackageがあれば大丈夫です。

f:id:object1985:20210818184605p:plain

こんな画面がでたらtoken作成は成功。コピーしておく。

以降はGitLabへ。

f:id:object1985:20210818184744p:plain

作成済みのGitLabリポジトリ

Repository > Mirroring repositories に以下を設定。

Git repository URL:GitHubのURL。 https:// のあとにユーザ名@をつける。

Mirror direction:GitLabからGitHubなのでPush

Authentication method:Password。いじらず。

Password:ここにGitHubで作成したtokenを設定。

これで5分に1回同期、または更新アイコンをクリックすると手動同期が走る。

エラーのときは画面上のErrorラベルにマウスカーソルを合わせると原因など教えてくれる。

エラーのときはたいてい認証周りで失敗するかと。

おわり。

EclipseからSpring Bootを触ってみました

f:id:object1985:20210626214426j:plain

環境

OS:Windows10
IDEEclipse(Version: 2021-03 (4.19.0))

f:id:object1985:20210626214523p:plain

Maven

PS C:\Users\hoge> mvn -version
Apache Maven 3.8.1 (05c21c65bdfed0f71a2f2ada8b84da59348c4c5d)
Maven home: C:\Users\hoge\scoop\apps\maven\current\bin\..
Java version: 16, vendor: Oracle Corporation, runtime: C:\Users\hoge\scoop\apps\openjdk\current
Default locale: ja_JP, platform encoding: MS932
OS name: "windows 10", version: "10.0", arch: "amd64", family: "windows"
PS C:\Users\hoge>

Eclipse Marketplaceより「spring boot」で検索した「Spring Tool Suite (STS)」を使います。

プロジェクト作成

File > New >Other 「spring starter project」で検索して「Next」

f:id:object1985:20210626215118p:plain

こんな感じで入力して「Next」

f:id:object1985:20210626215419p:plain

入れたテンプレがあれば選択。一旦未選択で「Finish」。

f:id:object1985:20210626215641p:plain

簡単にソース

/demo/src/main/java/com/tonaise/demo/DemoApplication.java を開きます

こんな感じにコーディング。

package com.tonaise.demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;

@SpringBootApplication
public class DemoApplication {

    public static void main(String[] args) {
        ConfigurableApplicationContext applicationContext = SpringApplication.run(DemoApplication.class, args);
        DemoApplication app = applicationContext.getBean(DemoApplication.class);
        app.hello();
    }

    private void hello() {
        System.out.println("hello()");
    }

}

初回だからか、こんな感じで長いインポートが続きます。Youtubeでも見て気長に待ちましょ。

f:id:object1985:20210626221552p:plain

起動してみる

メニューの緑マーク「Boot Dashboard」をクリック。

f:id:object1985:20210627153111p:plain

demoを選択して「(Re)start」起動する。

f:id:object1985:20210627153244p:plain

コンソールに「hello()」が表示されればOK。

f:id:object1985:20210627153405p:plain

ブラウザに結果を返してみる

新規クラス作成

pom.xmlを以下に修正。

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.5.2</version>
        <relativePath /> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.tonaise</groupId>
    <artifactId>demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>demo</name>
    <description>Demo project for Spring Boot</description>
    <properties>
        <java.version>11</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

「demo」プロジェクトを右クリック > Maven > Update Project で更新。

/demo/src/main/java/com/tonaise/demo/DemoWebApplication.java を作成。

package com.example;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class DemoWebApplication{

    @RequestMapping("/web")
    public String hello() {
        return "hello()";
    }
    
}

先ほどと同じように「Boot Dashboard」から起動。

起動後にChrome等ブラウザでアクセスして hello() が表示されることを確認。

http://localhost:8080/web

f:id:object1985:20210627154155p:plain

一旦以上。

参照: dev.classmethod.jp

Chromeがアドオンでおそくなった?

f:id:object1985:20210621144216p:plain
Chromeの快適さはずっと変わらなかったのですが昨日から急に重くなった。

「自宅回線が遅いのかな?アプリを立ち上げすぎたかな?」と思ったが同時にFirefoxを起動すると快適。

これはChromeだけに何か起こっていると思い、一昨日あたりにいれたアドオンを疑って一度すべて消した。

Chrome再起動後、快適に動作する。

以降、1つづつつけなおしてChrome再起動して~とチェックしたところ

Googleオフラインドキュメント」が重そう。

f:id:object1985:20210621144235p:plain

ドライブ上の資料が膨大だからかな・・・

いったん「Googleオフラインドキュメント」はアドオン(拡張機能)からは利用しない設定で様子見。


2021年6月25日追記

様子見していましたが関係なさそう。

常時タブが20くらい、8時間以上開いているのが原因かな・・・

PC性能は高いけどさすがにブラウザに無理させすぎただけかもです・・・

2021年6月27日追記

タスクマネージャーをみると「vmmem」というプロセスが2~3Gbほどメモリを使っていた。

どうもWindows上でUbuntsuを動作させることなどに使っているWSL2が使っているらしい。

とりあえずPowershell(or CMD)で再起動させてみる

wsl.exe --shutdown

シャットダウンさせると自動的に再起動する。

これでしばらく様子見(ごめんよChome・・・)

follow us in feedly