ジャンボモナカ

34歳のハゲデブがHTML5ハイブリッドアプリ開発プラットフォームmonacaを始めました。

macのローカルでJavaを実行する方法

f:id:maipontan:20200505121424p:plain

簡単なJavaプログラムを作りデバッグしたい時があります。

デバッグするのにSpringBootプロジェクトを作るのは正直めんどくさい。

できれば、macのローカルで実行したい。

そんな時は、macのターミナルでjavaプログラムをコンパイルし、実行するのが便利です。

例えば、下にデバッグしたいプログラムを用意したとします。

class Hoge{
    public static void main(String[] args){
        System.out.println("Hello world!!");
    }
}

hoge.javaファイルと保存して、Hogeクラスを実行したい。

そんな時は、例えば、デスクトップにhoge.javaが保存されていたとして、ターミナルでjavac hoge.javaコマンドを叩くと、Hoge.classファイルが生成されます。

それを同じくターミナルでjava Hogeと実行すればデバッグすることができます。

windowsでも同じようにできるので、簡単にJavaプログラムを確認したい場合に便利。

Spring Bootで複数のURLのパスを受け取る

f:id:maipontan:20200504144233p:plain

前回、Spring BootでURLのパスを受け取る方法を書きました。

jumbomonaca.hatenablog.com

その時は、一つのURLに対して、一つのメソッドを結びつける形でしたが、複数の異なるURLを一つのメソッドにマッピングしたい場合にどうすればいいのか調べました。

例えば、/hoge/fooを受け取りたい場合、配列で設定すれば解決できる。

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.stereotype.Controller;

@SpringBootApplication
@Controller
public class TestApplication {
    @GetMapping({"/hoge", "/foo"})
    public String test() {
        return "test";
    }
}

Google Apps ScriptからGoogle Spreadsheetsにカスタムメニューを追加

f:id:maipontan:20200519130213p:plain

Google SpreadsheetsからGoogle Apps Scriptを実行したい時に、毎回、スクリプトエディターから実行するのが、正直めんどくさい。

そこで、Google Spreadsheetsにメニューを追加して、そこからスクリプトエディターを開かずに実行したい。

幸い、Google Apps Scriptでカスタムメニューを追加してくれるメソッドがあるので、それを使ってアドオンメニューに項目を追加する。

追加前のアドオンメニューの画像を下に添付する。 f:id:maipontan:20200520112134p:plain

function testMain(){
  console.log("hello")
}

function onOpen(){
  let _ui = SpreadsheetApp.getUi();
  let _menu = _ui.createAddonMenu();
  _menu.addItem('testItem','testMain').addToUi();
}

Google Apps ScriptのスクリプトエディターからonOpen関数を実行すると、アドオンにメニューが追加される。

実行した結果の画像を下に添付する。

f:id:maipontan:20200520112230p:plain

アドオンメニューに「ファイル名」が追加され、さらにその下にonOpen関数で実行されたtestItemメニューが追加されている。

手軽にメニューを追加することができるので便利だ。

参考

developers.google.com

GAS実行時に起動時間の最大値を超えましたというエラー

f:id:maipontan:20200519130213p:plain

処理の想いGoogle Apps Scriptを実行したら、

「起動時間の最大値を超えました」

というエラーが発生。

原因を調査してみると、どうやらG SuiteのBusinessまたは、Enterpriseは30分で、それ以外は6分なので、重たい処理は、運用方法を変更するか、仕様を変更するか、アルゴリズムを変更するかが余儀なくされる。

developers.google.com

Spring BootでURLを取得する

f:id:maipontan:20200504144233p:plain

Spring BootでURLを取得するにはどうすればいいのだろうか?

org.springframework.web.servlet.support.ServletUriComponentsBuilderを使って取得することができるみたいだ。

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.servlet.support.ServletUriComponentsBuilder;
import org.springframework.stereotype.Controller;
import org.springframework.web.util.UriComponentsBuilder;


@SpringBootApplication
@Controller
public class HogeApplication {

    public static void main(String[] args) {
        SpringApplication.run(HogeApplication.class, args);
    }


    @GetMapping("/")
    public String top() {
        String uri = ServletUriComponentsBuilder.fromCurrentRequestUri().toUriString();
        return "top";
    }
}

参考 stackoverflow.com

Spring Bootでtymeleafのテンプレート先を指定する

f:id:maipontan:20200504144233p:plain

Spring Bootでtymeleafを指定したい場合は、return値でstring型の文字列を返すことによって指定することができる。

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.stereotype.Controller;

@SpringBootApplication
@Controller
public class HogeApplication {
    public static void main(String[] args) {
        SpringApplication.run(HogeApplication.class, args);
    }

    @GetMapping("/")
    public String bar() {
        return "bar";
    }

}
<!-- bar.html -->
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<body>
Hello tymeleaf
</body>
</html>