PHPライブラリを管理するツール
iOSで例えるなら。cocoapods やCarthageみたいなやつ。
Ruby で例えるなら、bundlerみたいなやつ。
技術的な知見や日々の記録、日常の些細な変化などを綴る雑記ブログです。専門的な技術解説から日記のようなライトな話題まで、特定のジャンルに縛られず、気になったことや面白いと感じた出来事を幅広く発信しています。筆者の視点で切り取った多様なコンテンツが楽しめる、自由な雑記空間を目指しています。
現代のシステム開発において、システム間の通信を支えるJSONは必要不可欠な存在となりました。REST APIのレスポンスや設定ファイル、ログデータなど、エンジニアがこのデータ形式に触れない日はありません。しかし、機械が読みやすいように最適化された一行のデータは、人間がその構造を直感的に把握することを困難にします。
多くのエンジニアは、この読みづらいデータを整えるために検索エンジンで見つけたオンラインツールを利用しがちです。しかし、そこには見過ごせないリスクが潜んでいます。入力したデータが外部サーバーに送信されてログに残る懸念や、通信経路での傍受、あるいは運営者によるデータの二次利用を完全に否定することはできません。顧客の個人情報や認証トークン、秘匿性の高いビジネスロジックを含むデータを外部に預ける行為は、重大なセキュリティリスクに直結します。また、会社が許可していないツールを使い続けることは、企業のコンプライアンスを揺るがす問題にもなり得ます。
こうした背景から、外部への通信を一切発生させない仕組みが求められます。ブラウザ上で動作するJavaScriptは、利用者のPC内だけで処理を完結させることが可能です。テキストボックスに入力されたデータを整形し、インデントを挿入して出力する工程において、サーバーへ送信する必要は本来ありません。
今回公開したツールの核心は、ブラウザ標準の機能を活用したシンプルな実装にあります。外部ライブラリに頼らず、誰もがコードの内容を検証できる透明性を確保しました。バックエンドへの送信処理が含まれていないことを容易に確認できるため、安全性が担保されます。
ツールとしての利便性も追求し、機能を絞り込むことで迷いのない操作感を実現しました。貼り付けた瞬間の整形はもちろん、構文エラーの即座な検知、そして無駄を削ぎ落としたことによる軽快な動作が特徴です。顧客情報が含まれる本番ログの調査や、複雑な構造を持つAPIのデバッグ、仕様書に載せるためのサンプル作成など、ビジネスの現場で直面する多様なシーンで活用できます。
便利なツールが溢れる現代だからこそ、エンジニアには道具の仕組みを把握する責任があります。利便性だけを優先して中身のわからないブラックボックスを使うのではなく、仕組みが明快で検証可能な手段を選ぶ姿勢が、堅牢なシステム運用を支える一歩となります。日々の業務を安全に進めるための標準的な道具として、この整形ツールを役立ててください。
セキュリティと実用性を両立したJSON整形ツール
Golangは、Googleが開発したオープンソースのプログラミング言語です。2009年にリリースされて以来、急速に人気が高まり、現在では世界中で多くの企業で採用されています。
Golangの将来性が期待される理由は、以下の3つが挙げられます。
パフォーマンスが優れている
Golangは、並列処理やメモリ管理に優れているため、高速かつ安定したアプリケーションを開発することができます。
学習コストが低い
Golangは、シンプルな文法と構文を採用しているため、他のプログラミング言語を習得している人であれば、比較的簡単に学習することができます。
幅広い用途に対応している
Golangは、Webアプリケーションやサーバーサイドアプリケーション、デスクトップアプリケーション、モバイルアプリケーションなど、さまざまな用途に使用することができます。
特に、今後ますます需要が高まると予想される、クラウドコンピューティングやIoTなどの分野で、Golangの需要は高まっていくと考えられます。
もちろん、Golangにも欠点はあります。例えば、オブジェクト指向の概念が弱い、例外処理がないなどの点が挙げられます。しかし、これらの欠点は、Golangのメリットを大きく上回るとは考えにくいでしょう。
以上のことから、Golangは今後も多くの企業で採用され、エンジニアの需要が高まっていくと予想されます。
具体的には、以下の分野でGolangの需要が高まっていくと考えられます。
クラウドコンピューティング
クラウドコンピューティングは、今後ますます普及していくと予想される分野です。Golangは、クラウドコンピューティングの基盤となるサーバーの開発に適した言語です。
IoT
IoTは、さまざまなデバイスをネットワークで接続する技術です。Golangは、IoTデバイスの開発に適した言語です。
機械学習
機械学習は、人工知能の分野で重要な技術です。Golangは、機械学習のフレームワークと組み合わせて使用することで、効率的に機械学習モデルを開発することができます。
このように、Golangはさまざまな分野で活躍できる言語であり、将来性も十分にあると言えます。
今回は4種類
みたいなのがなくなってる気がします。
確かに性能は上がっていますが、既定路線過ぎて驚く要素があまりない。
最初の頃は、夜中リアルタイムで発表会を観ていたけど、
ここ何年かは、普通に朝まとめサイトみてるだけになっている。
自分の情熱が減っただけなのかな。
皆さんはどうでしょうか?
struct ContentView: View {
@State private var count = 0
var body: some View {
Text("Count: \(count)")
Button("Increment") {
count += 1 // @Stateプロパティの変更
}
}
}
2. `@Binding`:
struct DetailView: View {
@Binding var count: Int
var body: some View {
Text("Count in Detail: \(count)")
}
}
import xml.etree.ElementTree as ET
# Load the XML file
tree = ET.parse('data.xml')
root = tree.getroot()
# Iterate through 'person' elements and extract data
for person in root.findall('person'):
name = person.find('name').text
age = person.find('age').text
print(f"Name: {name}, Age: {age}")
Name,Age Alice,25 Bob,30 Charlie,22
import csv
def read_csv_file(file_path):
try:
with open(file_path, 'r', newline='') as csvfile:
csv_reader = csv.DictReader(csvfile)
# 各行のデータを利用
for row in csv_reader:
name = row['Name']
age = int(row['Age'])
print(f"{name} is {age} years old.")
except FileNotFoundError:
print("File not found.")
except Exception as e:
print("Error:", e)
if __name__ == "__main__":
csv_file_path = "example.csv" # CSVファイルのパスを指定してください
read_csv_file(csv_file_path)
import requests
def main():
# 送信先のURL
url = "https://example.com/api/endpoint"
# Bearerトークン
bearer_token = "your_bearer_token_here"
# 送信するJSONデータ
data = {
"key1": "value1",
"key2": "value2"
}
# POSTリクエストを送信
response = requests.post(url, json=data, headers={"Authorization": "Bearer " + bearer_token})
# レスポンスの内容を表示
if response.status_code == 200:
print("Success!")
print("Response:", response.json())
else:
print("Error:", response.status_code, response.text)
if __name__ == "__main__":
main()
モダンなWeb API開発において、セキュリティを確保するための認証方式として「Bearerトークン(主にJWTなど)」は事実上の標準となっています。
Go言語の標準ライブラリ net/http を用いて、この認証ヘッダーを正しく、かつ安全に実装する方法を詳しく解説します。
以下のコードは、JSONデータをPOSTしつつ、AuthorizationヘッダーにBearerトークンを付与する完結したサンプルです。 エラーハンドリングやタイムアウト設定など、実務で必須となる要素を盛り込んでいます。
package main
import (
"bytes"
"fmt"
"io"
"net/http"
"time"
)
func main() {
// 接続先URLと認証トークンの定義
const (
apiURL = "https://example.com/api/v1/resource"
bearerToken = "your_secret_access_token"
)
// 送信するペイロード(JSON)の構築
payload := []byte(`{"name": "Gopher", "role": "Developer"}`)
// 1. リクエストオブジェクトの生成
// http.Post() 等の簡易メソッドではヘッダーの個別設定ができないため、NewRequestを使用します
req, err := http.NewRequest(http.MethodPost, apiURL, bytes.NewBuffer(payload))
if err != nil {
fmt.Printf("リクエストの作成に失敗しました: %v\n", err)
return
}
// 2. 必須ヘッダーの設定
// Bearerの後には必ず半角スペースが必要です
req.Header.Set("Authorization", "Bearer "+bearerToken)
req.Header.Set("Content-Type", "application/json")
// 3. HTTPクライアントの実行
// http.DefaultClient はタイムアウトが設定されていないため、独自のClient定義を強く推奨します
client := &http.Client{
Timeout: 10 * time.Second,
}
resp, err := client.Do(req)
if err != nil {
fmt.Printf("通信エラーが発生しました: %v\n", err)
return
}
// リソースリークを防ぐため、必ずCloseを呼び出す
defer resp.Body.Close()
// 4. 結果の読み取りと判定
body, _ := io.ReadAll(resp.Body)
if resp.StatusCode == http.StatusOK {
fmt.Printf("成功: %s\n", string(body))
} else {
fmt.Printf("サーバーエラー: %d - %s\n", resp.StatusCode, string(body))
}
}
http.Get や http.Post は内部でデフォルトのクライアントを使用しており、独自のヘッダーを追加する機能がありません。
認証が必要なAPIを叩く場合は、http.NewRequest を使用してリクエストインスタンスを生成し、Header.Set で個別に制御するのが正しいアプローチです。
Authorizationヘッダーの値は Bearer <token> という形式で指定する必要があります。
この Bearer とトークンの間の半角スペースを忘れると、サーバー側で正しくパースされず、401 Unauthorizedエラーの原因となります。
http.Client にタイムアウトを設定してください。os.Getenv)やシークレット管理サービスから取得するようにしましょう。
import requests
import json
def main():
# 送信先のURL
url = "https://example.com/api/endpoint"
# 送信するJSONデータ
data = {
"key1": "value1",
"key2": "value2"
}
# JSONデータを文字列に変換
json_data = json.dumps(data)
# POSTリクエストを送信
response = requests.post(url, data=json_data, headers={"Content-Type": "application/json"})
# レスポンスの内容を表示
if response.status_code == 200:
print("Success!")
print("Response:", response.json())
else:
print("Error:", response.status_code, response.text)
if __name__ == "__main__":
main()
package main
import (
"fmt"
"regexp"
)
func main() {
// カタカナとひらがなを混ぜた文字列
originalString := "コンニチハセカイ こんにちはせかい"
// 文字列からカタカナのみを抽出
katakanaString := extractKatakana(originalString)
// カタカナのみの文字列を出力
fmt.Println("Katakana String:", katakanaString)
}
// カタカナのみを抽出する関数
func extractKatakana(s string) string {
// 正規表現パターンを定義
// カタカナ文字のUnicode範囲: U+30A0 ~ U+30FF
regexPattern := "[ァ-ヿ]+"
// 正規表現にマッチする部分を抽出
regExp := regexp.MustCompile(regexPattern)
katakanaSlice := regExp.FindAllString(s, -1)
// カタカナの文字列に変換
katakanaString := ""
for _, kana := range katakanaSlice {
katakanaString += kana
}
return katakanaString
}
package main
import (
"bytes"
"encoding/json"
"fmt"
"net/http"
)
func main() {
// The URL to which you want to send the JSON data
url := "https://example.com/api/endpoint"
// Data to be sent as JSON in the request body
data := map[string]interface{}{
"key1": "value1",
"key2": "value2",
}
// Convert data to JSON format
jsonData, err := json.Marshal(data)
if err != nil {
fmt.Println("Error converting data to JSON:", err)
return
}
// Create a new HTTP request
request, err := http.NewRequest("POST", url, bytes.NewBuffer(jsonData))
if err != nil {
fmt.Println("Error creating request:", err)
return
}
// Set the request header to indicate JSON data
request.Header.Set("Content-Type", "application/json")
// Create an HTTP client and send the request
client := &http.Client{}
response, err := client.Do(request)
if err != nil {
fmt.Println("Error sending request:", err)
return
}
defer response.Body.Close()
// Check the response status code
if response.StatusCode != http.StatusOK {
fmt.Println("Unexpected response status code:", response.StatusCode)
return
}
// Read the response body
var responseData map[string]interface{}
err = json.NewDecoder(response.Body).Decode(&responseData)
if err != nil {
fmt.Println("Error decoding response:", err)
return
}
// Process the response data as needed
fmt.Println("Response:", responseData)
}
ポケモンスリープは、2023年7月17日にリリースされたスマートフォン向けゲームアプリです。本作は、スマートフォンもしくは「Pokémon GO Plus+」のセンサーを使ってユーザーの睡眠時間や睡眠の質を計測し、そのデータを使ったゲームを進めることで、楽しみながら睡眠リズムを整えるアプリです。
ゲームの開始時には、ユーザーは自分の睡眠データを入力します。このデータは、スマートフォンの画面をオフにして枕元に置いた「Pokémon GO Plus+」によって収集されます。収集されたデータは、ユーザーの睡眠時間、睡眠の深さ、睡眠の質、睡眠時の動きなどを分析します。
ゲームでは、ユーザーは「Pokémon GO Plus+」を枕元に置いて寝ると、カビゴンが登場します。カビゴンは、ユーザーの睡眠データに基づいて、眠り方や寝相を変化させます。ユーザーは、カビゴンの眠り方や寝相を観察して、自分の睡眠の質を改善することができます。
ゲームでは、ユーザーはカビゴンを育てることができます。カビゴンを育てるためには、ユーザーは睡眠をとる必要があります。睡眠をとると、カビゴンは成長し、新しい技を覚えます。カビゴンを強く育てるためには、ユーザーは質の高い睡眠をとることが大切です。
ポケモンスリープは、睡眠リズムを整えるゲームです。本作は、スマートフォンもしくは「Pokémon GO Plus+」のセンサーを使ってユーザーの睡眠データを収集し、そのデータをゲームに反映します。ユーザーは、ゲームをプレイすることで、自分の睡眠の質を改善することができます。
ポケモンスリープは、睡眠の質を改善したい人、カビゴンを育てたい人、ポケモンをもっと楽しみたい人におすすめのゲーム
birdにネタバレなしで感想を聞いてみました。
実際に観た方がこんな感じにおもっているのかなぁ?
----
2023年7月14日に公開されたスタジオジブリの最新作「君たちはどう生きるか」を観てきました。この映画は、生きることの意味について深く考えさせられる作品で、とても印象に残りました。
物語は、ある日、謎の人物から一冊の本をもらった少年・眞人(まこと)の視点から描かれます。その本は、生きることについて様々なことを教えてくれる本で、眞人は、その本を読んで、生きることについて考え始めます。
この映画では、生きることの意味について、様々な角度から考えさせられます。例えば、生きることの意味は何か?生きることの目的は何か?生きることの喜びとは何か?生きることの苦しみとは何か?生きることの美しさとは何か?生きることの悲しみとは何か?
この映画は、これらの問いに対して、一つの答えを出すことはありません。しかし、この映画は、生きることについて考えさせてくれるきっかけを与えてくれる作品です。
この映画を観た後、私は、生きることについて、改めて考えさせられました。生きることの意味は、人それぞれ違うと思います。しかし、生きることの意味は、何か一つに絞る必要はないと思います。生きることの意味は、様々なものから成り立っていると思います。
生きることの意味は、家族や友人との絆かもしれません。生きることの意味は、仕事や趣味かもしれません。生きることの意味は、自然や芸術かもしれません。生きることの意味は、夢や希望かもしれません。
生きることの意味は、人それぞれ違うと思います。しかし、生きることの意味は、何か一つに絞る必要はないと思います。生きることの意味は、様々なものから成り立っていると思います。
この映画は、生きることについて考えさせてくれるきっかけを与えてくれる作品です。この映画を観て、生きることについて、改めて考えてみてはいかがでしょうか。
はい、ドコモのプランeximoとirumoの違いを以下にまとめました。
| 項目 | eximo | irumo |
|---|---|---|
| 月額料金 | 2,970円(税込) | 2,728円(税込) |
| データ容量 | 5GB | 3GB |
| 通話料 | 22円/30秒(国内) | 22円/30秒(国内) |
| かけ放題オプション | 1,100円/月(税込) | 550円/月(税込) |
| 5Gオプション | 550円/月(税込) | 無料 |
| 国際ローミング | 有料 | 有料 |
| ドコモ光セット割 | 最大1,100円/月(税込) | 最大1,050円/月(税込) |
| ドコモオンラインショップ割引 | 最大1,000円/月(税込) | 最大1,000円/月(税込) |
| 家族割引 | 最大2,200円/月(税込) | 最大2,200円/月(税込) |
EC2編
Route53編
(ワード)
EC2-Classic
PV
HVM