Go入門(Windows)
公式ドキュメントを見ながらチュートリアルを進めていく。
https://go.dev/doc/
※私はWindowsでPowerShellを使います。
インストール
https://go.dev/dl/
Featured downloadsからWindows向けのインストーラ(.msi)をダウンロード
ダブルクリックしてNextを押していってインストール
PowerShellから「go version」を実行してバージョンが表示されたらインストール完了
チュートリアル
https://go.dev/doc/tutorial/getting-started
・PowerShellを起動
起動した状態のディレクトリのまま作業する(例: C:\Users\yourname)
・作業用ディレクトリ作成
mkdir golearn
(最初、mkdir goで作業したら、goが使うデフォルトのディレクトリ名と被って失敗した、、)
・モジュール初期化(依存関係の追跡を有効にする)
go mod init example/hello
(よくわからんが、やる)
golearn/go.modが作成される
go/pkg/mod/cache/lockも作成される
・golearn/hello.goファイルを作成して、コード書いて保存
package main
import "fmt"
func main() {
fmt.Println("Hello, World!")
}
VSCodeで書いたら、ほとんど補完してくれたので楽
・実行
go run .
を実行して「Hello, World!」が表示されるのを確認
外部のパッケージを使いたい場合
・パッケージを探す
https://pkg.go.dev/search?q=quote
たとえば「quote」で検索
READ MEやドキュメントでどんなパッケージか確認
・コード上でインポートする
package main
import "fmt"
import "rsc.io/quote"
func main() {
fmt.Println(quote.Go())
}
golearn/hello.goを一部修正
・モジュールを使えるようにする
go mod tidy
を実行すると、モジュールがダウンロードされる
・再実行するとエラーになる
go run .
Don't communicate by sharing memory, share memory by communicating.
たぶんわざとそうしてると思うが、
fmt.Println(quote.Go())
を
fmt.Println(quote.Hello())
に変えると、「Hello, world.」が表示される
#の扱い ~ どっぺるソングで困った話
どっぺるソングのURL設計がそもそもよくないのですが、
アーティスト名で検索すると「https://lightwill.main.jp/hc/doppelsong/B%27z/1」
アーティスト名がURLの一部になるので、URLエンコードする必要がある。
URLエンコードだけでほとんどの場合大丈夫だったが、「#ババババンビ」というアイドルグループがいた。
「https://lightwill.main.jp/hc/doppelsong/#%E3%83%90%E3%83%90%E3%83%90%E3%83%90%E3%83%B3%E3%83%93/1」
ページが表示されているから問題ないように見えるかもしれない。
しかし、検索が効いていない。
URLの#以降はページ内リンクとみなされてしまう、、
苦肉の策として、「#」でリクエストが来たらリダイレクトするようにした。
PowerShell入門
サンプルコード
hello.ps1
Set-Variable -Name MAX_LEVEL -Value 100 -Option Constant Write-Output MAX_LEVEL; Write-Output (Get-Date).ToString("yyyy/MM/dd HH:mm:ss") #配列 [int[]]$nums=1,2,3 for ($i = 0; $i -lt 3; $i++) { Write-Output $nums[$i] } #こうも書ける foreach ($i in 1..3) { Write-Output $i } #関数 function lottery([int]$rate) { $random = Get-Random -Minimum 0 -Maximum 100 return $random -lt $rate } if (lottery(50)) { Write-Output "Hit!" } else { Write-Output "Miss!" }
実行時に許可がいるので以下のように実行
powershell -NoProfile -ExecutionPolicy Unrestricted ./hello.ps1
エクセルからMySQLに接続
MySQL ODBCドライバをインストール
https://dev.mysql.com/downloads/connector/odbc/
使うエクセルが2007(32bit)だったので、8.0を選択。
ODBCデータソースの設定
コントロールパネルのODBCデータソースアドミニストレータ(32ビット)を使用して、MySQLの接続情報を設定
MySQLサーバーのIPアドレス、データベース名、ユーザー名、パスワードを入力
MySQL権限設定
VirtualBoxのMySQLに接続しようとしたけどエラー。
権限を設定しないといけない。
CREATE USER 'remoteuser'@'%' IDENTIFIED BY 'password';
GRANT SELECT, INSERT, UPDATE, DELETE ON lightwill.* TO 'remoteuser'@'%';
FLUSH PRIVILEGES;
外部からアクセスできるユーザを作成。
SELECT, INSERT, UPDATE, DELETE の権限を付与。
反映。
エクセルマクロ(VBA)
Sub AccessMySQL()
Dim conn As Object
Dim rs As Object
Dim strSql As String
Dim strConn As String
' MySQLへの接続情報を設定
strConn = "Driver={MySQL ODBC 8.0 Unicode Driver};Server=192.168.33.10;Database=lightwill;Uid=remoteuser;Pwd=password;"
' ADO Connectionオブジェクトを作成
Set conn = CreateObject("ADODB.Connection")
' 接続を開く
conn.Open strConn
' SQLクエリを作成
strSql = "SELECT * FROM dp_comments order by id desc LIMIT 0, 30;"
' ADO Recordsetオブジェクトを作成
Set rs = CreateObject("ADODB.Recordset")
' RecordsetにSQLクエリの結果を格納
rs.Open sql, conn
' データをExcelに貼り付け
Sheet1.Range("A1").CopyFromRecordset rs
' 接続を閉じる
rs.Close
conn.Close
' オブジェクトの解放
Set rs = Nothing
Set conn = Nothing
End Sub
SpringBoot入門:DBから値を取得
気軽に試せるH2データベースを使えるようにする
src/main/resources/
application.properties
spring.datasource.url=jdbc:h2:mem:testdb;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE spring.datasource.driverClassName=org.h2.Driver spring.datasource.username=sa spring.datasource.password= spring.sql.init.encoding=UTF-8 spring.sql.init.mode=always spring.sql.init.schema-locations=classpath:schema.sql spring.sql.init.data-locations=classpath:data.sql spring.h2.console.enabled=true
schema.sql
create table if not exists employee( id varchar(50) primary key, name varchar(50), age int );
data.sql
insert into employee(id, name, age)
values('1', 'Tom', 30);
Model、Repository、Service、Controller、Viewを作成、修正
src/main/java/com.example.demo/hello
Employee.java
@Data
public class Employee {
private String employeeId;
private String employeeName;
private int employeeAge;
}
HelloRepository.java
@Repository
public class HelloRepository {
@Autowired
private JdbcTemplate jdbcTemplate;
public Map<String, Object> findById(String id) {
String query = "select *"
+ " from employee"
+ " where id=?";
Map<String, Object> employee = jdbcTemplate.queryForMap(query, id);
return employee;
}
}
HelloService.java
@Service
public class HelloService {
@Autowired
private HelloRepository repository;
public Employee getEmployee(String id) {
Map<String, Object> map = repository.findById(id);
String employeeId = (String) map.get("id");
String name = (String) map.get("name");
int age = (Integer) map.get("age");
Employee employee = new Employee();
employee.setEmployeeId(employeeId);
employee.setEmployeeName(name);
employee.setEmployeeAge(age);
return employee;
}
}
HelloController.javaに追記
@Autowired
private HelloService service;
@PostMapping("/hello/db")
public String postDbRequest(@RequestParam("eid") String id, Model model) {
Employee employee = service.getEmployee(id);
model.addAttribute("employee", employee);
return "hello/db";
}
src/main/resources/templates
db.htmlを作成
<p th:text="${employee.employeeId}"></p>
<p th:text="${employee.employeeName}"></p>
<p th:text="${employee.employeeAge}"></p>
hello.htmlに追記
<form method="post" action="/hello/db">
<input type="text" name="eid" th:value="${eid_value}">
<button>送信</button>
</form>
H2データベースのコンソール
http://localhost:8080/h2-console
JDBC URL: jdbc:h2:mem:testdb
SpringBoot入門:環境構築
参考書はこちらを選択(Kindle Unlimitedで無料で読めるので)
Spring 解体新書
環境構築
IDE
Spring Tools 4 for Eclipse
https://spring.io/tools/
windows版をダウンロード、任意の場所に配置して「java -jar spring-tool-suite-xxx.jar」
sts-x.x.x.RELEASEの中のSpringToolSuite4.exeが本体
Pleiadesの日本語化プラグイン
https://willbrains.jp/
Pleiades プラグイン・ダウンロードからWindowsをダウンロード
解凍してsetup.exe
先ほどのSpringToolSuite4.exeを選択して日本語化
Lombokインストール
https://projectlombok.org/download
java -jar lombok.jar
SpringToolSuite4.exeを選択してインストール
Spring Tools 4の設定
コード補完の設定
ウィンドウ→設定→Java→エディタ→コンテンツアシスタント
Javaの自動有効化トリガー
.abcdefghijkemnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_
※デフォルトだと.を入力した時しか補完されない
「Enter以外の挿入トリガーを使用不可にする」にチェック
Ctrl + Shift + Fでコード整形
新規Springスタータープロジェクトの作成
追加ライブラリ
Spring Boot DevTools, Lombok, JDBC API, Spring Data JDBC, H2 Database, Thymeleaf, Spring Web
src/main/resources/templates
hello.htmlを作成
<html xmlns:th="http://www.thymeleaf.org">
<body>
Hello World
</body>
</html>
src/main/java/com.example.demo/hello
HelloController.javaを作成
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
@Controller
public class HelloController {
@GetMapping("/hello")
public String getHello() {
return "hello";
}
}
プロジェクトを右クリック→実行→SpringBootアプリケーション
http://localhost:8080/hello
Java入門
筆者はPHPを習得しているので環境構築くらいしか書くことがない。
(言語の違いで気づいたことがあれば追記していく)
JavaDriveでJava入門
https://www.javadrive.jp/start/
JDKのインストール
https://jdk.java.net/
Ready for use: JDK XXをクリック
BuildsからWindowsのzipをダウンロード
任意のディレクトリに展開
環境変数の設定
検索窓に「環境変数」と入力して環境変数Windowを開く
ユーザー環境変数かシステム環境変数に「JAVA_HOME」を追加
変数値には先ほど配置したパスを指定「C:\xxx\jdk-xx.x.x」
「Path」の編集で、新規→「%JAVA_HOME%\bin」を追加
コマンドプロンプトで「javac -version」で確認
公式ドキュメント
https://www.oracle.com/jp/java/technologies/documentation.html
該当バージョンのリンク日本語→左メニューのAPIドキュメント
Hello, World
Hello.java
class Hello {
public static void main(String[] args) {
System.out.println("Hello");
}
}
コンパイル
javac Hello.java
実行
java Hello
サンプルプログラム
import java.time.LocalDate; class Sample { public static void main(String[] args) { final int MAX_LEVEL = 100; System.out.println(MAX_LEVEL); LocalDate ld = LocalDate.now(); System.out.println(ld); //配列 int[] nums = new int[3]; nums[0] = 1; nums[1] = 2; nums[2] = 3; for (int i = 0; i < 3; i++) { System.out.println(nums[i]); } //こうも書ける int[] nums2 = {1, 2, 3}; for (int num : nums2) { System.out.println(num); } //String型や配列型は参照型なので、代入すると同じものを参照する int[] others = nums2; nums2[0] = 4; // 同じものを参照しているので、4になる System.out.println(others[0]); int[] others2 = nums2.clone(); nums2[0] = 5; // cloneだと別オブジェクトになるので5にならない System.out.println(others2[0]); } }