わしのlog

プログラミングとかバイクとか。

97y サバーバンを購入して半年が経ったので感想等

はじめに

ブログサボるのがもはやお家芸のだいきちです。
5月の末あたりに97y GMC サバーバンを個人売買にて購入し、約半年が経過したので感想等書いていきたいと思います。
まず、購入当初のツイートがこちら(96yと書いてますが正しくは97yです。後でVIN見て気付きました)

現車確認

写真だけで買うわけにもいかないので、現車確認に行きました。
エンジンはセル一発でかかる状況、年式相応に足回りや外装はやれているものの、特に不具合もなさそうでした。
前オーナーさんによる気になる点は以下

  • エアコンが効かない
  • 下回りのサビが多い
  • ホイールはくすんでいる
  • 走行距離は17万km弱
  • 外装ヤレ(タッチペンで補修した跡やぶつけたらしき跡)がある
  • マフラーの先に単管パイプが溶接されている(おそらく前前オーナーの車検対策)

まぁ想定の範囲内(値段が値段なので)でした。
オークションでの購入だった為、所定の手続きを踏んで落札。
後日引き取りに行きました。
一時抹消状態だった為、友人の積車に載せて運ぶ作戦でいきました。
近県で助かった・・・。
以下、現車確認時の画像です。 f:id:devdaikichi:20201106145105j:plain
f:id:devdaikichi:20201106145207j:plain
f:id:devdaikichi:20201106145207j:plain
f:id:devdaikichi:20201106145333j:plain f:id:devdaikichi:20201106145359j:plain f:id:devdaikichi:20201106145424j:plain

足回り修理

とりあえず買ったままの状態ではどこに不具合があるかわからないので、一旦点検から入りました。
まず変えないといけない箇所は、足回りでした。
特にフロント左のアッパーアームについているボールジョイント、これがガッタガタでした。
また、リアデフからも少々のオイル漏れ。ガスケットと共にデフオイルも交換ですね。
これだけガタが来てると他の箇所も不安なので、アイドラアームなども交換。
また、敷地内試運転した感じハンドルのセンターが出ていない(右に切った状態でまっすぐ走る)ようだったので
タイロッドエンドの調整も行う為に、新品注文。
意外と変えるとこ多いなと思いつつも、全て注文しました。
足回りで変えたものは結局以下のように。

  • 左右上下ボールジョイント - ¥19151
  • ギアオイル * 2 - ¥6006
  • デフカバーガスケット - ¥1628
  • ピットマン アイドラ アーム タイロッド エンドフルセット - ¥54054
  • スタビエンドリンク - ¥3003

結構高い・・・。
とはいえ足回りがダメになると走行に支障が出るのでやむをえず。
また、こういった作業を進めるにあたって、車体がデカイので工具が必要になりました。
購入した工具が以下。 * ガレージジャッキ3.5t - ¥12570 * ウマ * 4基 - ¥3800 * ボールジョイントプーラー(SST) - ¥10980
この時点ですでに¥111192・・・。
とはいえ、後には引けないので気合入れて修理。

f:id:devdaikichi:20201106151255j:plain
新品のボールジョイントを入れたところ

f:id:devdaikichi:20201106151507j:plain
ピットマンアームが外れたところ

こんな感じで作業を進めていき、足回りリフレッシュが完了。
文章で書くとあっさりしていますが、この工程だけで納車から三ヶ月ほど経過しています。
特にアイドラアーム、ピットマンアームがテーパーのような構造になっていて中々はずれず
炙ったりどついたりでかなり体力を使いました。
二度とやりたくない作業best3に入りますね・・・。

消耗部品交換

次に消耗部品の交換を行いました。
プラグの火の飛びが怪しく、見てみたところ変えたことがないのでは?というレベルで錆びていました。
エアクリのフィルター、エンジンオイルなどは勿論変えるとして、冷却水も怪しかったので一応変えることに。
ナンバー灯は一つに割れがあり、バッテリーは上がっていたのでどちらも購入。
そして始動後に冷却水のコネクタに割れがあることが発覚。漏れても困るのでここも購入。
購入した消耗部品が以下。

  • NGKプラチナプラグ * 8 - ¥5456
  • エアフィルター - ¥4488
  • オイルフィルターセット - ¥3674
  • エンジンオイルドレンプラグ - ¥1089
  • クーラント - ¥3003
  • ACデルコ バッテリー 78-7MF - ¥16555
  • ナンバー灯ハウジング - ¥2376
  • オイルフィルターレンチ - ¥627
  • エンジンオイル * 6(予備含) - ¥8646
  • ヒーターホースコネクタ - ¥2189

バッテリーが高い・・・。
とはいえ、このあたりを交換すると始動や吹け上がりがよくなった感じがしました。
中古車買った際はこのあたりは総交換でよさそうですね。

エアコン修理

これが苦戦した・・・というか、一番お金がかかった。
まず、エアコンの現状確認すると、ガスが抜けてしまっているのと、エアコンのコントロールパネル(フロント)が壊れていそうだった。
よって、エアコンのコントロールパネルとガス、その他ガスが漏れている箇所の部品を購入した。

  • A/C コントロール パネル - ¥39831
  • ヒーターホースジョイント - ¥1837
  • ヒーターコントロールバルブ - ¥4004
  • A/C リアエキスパンションバルブキット - ¥9185
  • ヒーターホースジョイント(T) - ¥1298
  • A/C プレッシャー スイッチ COMP - ¥6105
  • A/C プレッシャー スイッチ(低圧側) - ¥3003
  • A/C プレッシャー スイッチ(高圧側) - ¥4004
  • A/C オリフィスチューブ - ¥1496
  • A/Cアキュムレーター - ¥6886
  • A/C チャージ バルブ キャップ コア セット - ¥2002
  • A/C Oリング シール キット - ¥2299
  • R134a PAGオイル蛍光剤入りガス缶 - ¥1978
  • クーラーガス * 15(予備含) - ¥7244

コントロールパネルが異様に高い・・・。
そして部品数が異常。
財布が空になるかと思いましたが、どうにかこれで直った・・・。
かに見えたんですが、どうやら直り切っていない模様。
フロントのエアコンの効きが悪く、風量も少ないし、外気/内気の切り替えがうまくいってなさげです。
とりあえず漏れはなくなりましたが別の問題ですね、おそらくエアコンのコア部分のフラップか、アクチュエータがおかしいんだと思います。
が、今回はとりあえず乗れるまでになればいいのでこのあたりで途中やめに。
あとは来年に持ち回しかな・・・。
以下、作業途中の写真です。

f:id:devdaikichi:20201106160328j:plain
ガスこれだけ入ります。多い。

不安部品の購入とフューエルポンプからの異音

いよいよ車検!といきたいところですが、ここまで整備していて気付きませんでしたが
なにやらフューエルポンプから異音が・・・。
「ミーーーー」というような音が出ているので、不安になり部品を購入して交換することに。
また、その他不安部品としてオルタネータの不具合がよく出る車両とのことで、オルタネータも購入。

  • オルタネータ - ¥22528
  • フューエル ポンプ モジュール ASSY - ¥21010

早速燃料タンクをおろしてみると
f:id:devdaikichi:20201106162344j:plain
んー、汚い・・・。
そして燃料ポンプの細いパイプの方がサビで折れた・・・。
交換しておいてよかったです。
逆順で組み付けて始動、異音がないことが確認できました。

いよいよ車検

車検に落ちそうなところが無いか点検、整備後、仮ナンバーを取得していざ車検場へ!
機能関係、灯火類などは問題なく通過しました。
・・・が、エンジンの原動機型式の打刻が見つからず、1回目の車検はタイムオーバー。
車検場の検査員も見つけることができず、自身でも探ってみましたが結局見つからず・・・。
ユーザ車検は諦めて、最寄りのアメ車屋さんにもっていくことになりました。
結果からいうと、アメ車屋さんも見つけることができず、打刻のし直し、という対応になりました。
そんなことあるのか・・・と思いましたが、サビで消し飛んだりした場合など稀にあるケースみたいです。
餅は餅屋、ということでここに関してはアメ車屋さんに頼んでよかったと思います。
ありがとう、アメ車屋さん。

車検完了

f:id:devdaikichi:20201106163839p:plain
洗車中の写真

晴れて車検を取得することができ、公道走行ができるようになりました。
ここまで長かったんですが、運転してみるとそんなことは吹っ飛びますね。
V8エンジンは最高です。
これからも不具合や故障と付き合っていくことになるとは思いますが、ぼちぼち維持していこうかと思います。

車検後レビュー

車検とれて終わり!というわけではなく、やはり20年超も前の車となると色々なところにガタがきてますね〜。
以下、車検後の簡単な不具合一覧です。

  • ラジエータのヒーターインレットというところのプラグ(ゴム栓)がとれて冷却水が漏れた(あわや大惨事)
  • ベルトが少し鳴いてる気がする。プーリーなど交換すべきかも
  • オーディオが壊れてる。(カロッツェのナビを予約したので、そちらで・・・。)
  • 下回りのサビは塗ってあげないとどんどん進行しそう
  • 右ウィンカーがハイフラになっている。接触なのか抵抗がおかしくなっているのか・・・
  • 鍵がささっている時の「ピー」という警告音のタイミングがおかしい。多分これも接触不良。
  • リアにスピーカーを組んでいるみたいだが音が出ていない
  • 謎のセキュリティ機器、謎のリアカメラ(どちらも機能していない)
  • ウォーターポンプの錆がひどい
  • リフトアップ車両故のハイビーム返しが辛い(自業自得)

結構ありますが、致命的なのは冷却水のあたりくらい?
とりあえず増し締めと、新品のキャップを買ったのでどうにかなりそうです。
エアコンは来年、ベルト周り・ウォーターポンプは今年中にはリフレッシュしたいですねぇ。
17万キロを超えた車なので、どこかのタイミングで腰上だけでもエンジンのオーバーホールが必要かも・・・?
オーバーホールするのは大金なので、とりあえずは騙し騙し乗ることにします。
オイル漏れなどは今のところないですしね。

終わりに

これからも手がかかりそうですが、大事に乗って行こうと思います。
リッター5kmは中々つらいですが、迫力と積載性はピカイチのいい車両だと思います。
乗ってみて気づいたんですが、意外と細い道もいけます。
同様なフルサイズ車両(タンドラなど)と比べると、意外とスマートなイメージ。
皆さんもサバーバン、いかがでしょうか。
注目の的になれますよ、車両代安いし・・・w
以上、半年のレビューでした。

現場からは以上です。

6月のMyPlan振り返り

はじめに

だいきちです。
またもすっかりとサボってしまいました。
車を買ったり、リモートワークになったり、個人的な依頼でアプリを作ったり・・・
そんな毎日を過ごしていました。
自戒も含めて6月のMyPlan振り返りいっちゃいましょう。


6月度振り返り

大型二輪免許をとる

ハイ、何故か先に特殊小型船舶免許を取得することに。
友人と夏に水上ジェットを運転しよう!ということで取得しました。
不合格通知は届いていないので、このままいくと7月中に免許が送付されてくるはず。
大型二輪免許は後述しますが、車のレストアが終わり次第となりそうです・・・。

体重を落とす(70kg目標)

なんだかんだ2kgほど落ちました。
意識的に大盛をやめていたらいつの間にか・・・という感じです。
新型コロナウィルスの影響も段々と収まっていっているので
衛生面に気を付けながらジム再開も考えているところです。

現在構想しているWebサービスをリリースする

思い付きでテイクアウトの情報を収集して発信するWebサービスの雛形を作ったんですが
そうこうしているうちに他のメディアが似たものを大量にリリースされているのが見えて
若干萎えてCloseしてしまいました。
熟考して自分の中でリリースできるレベルになったらひっそりあげておこうかな・・・のレベルです。

終わりに

久々の更新になってしまいましたが、こういった感じです。
最近はプロジェクトを2個掛け持ちするようになっていて、割と忙しかったり・・・
(言い訳ですね)
これからも自己研鑽を忘れず、頑張っていきたいです。

P.S. 車を買いました。1997年式 シボレー(表記上GMC) サバーバンです。
ツイート上、1996yになってますが、1997yの間違いです。
(VINナンバーで気づきました)

動くのは動くんですが、足回りにガタがあるのでレストア中です。
なんとか7月中には車検取得できるように頑張っています。
後、バイクも車検時期だったので取得してきました。
(測定ラインで、リフレクターで落ちた時は終わったと思いました)



現場からは以上です。

【メモ】Electron + React + Redux + react-routerでexactが効かない

環境

PC

package.json

  • connected-react-router : 6.8.0
  • eslint-loader : 4.0.2
  • react : 16.13.1
  • react-dom : 16.13.1
  • react-redux : 7.2.0
  • react-router-dom : 5.1.2
  • redux : 4.0.5
  • electron : 8.2.5

概要

以下、迷い込むまでの道のり

  • Electronでアプリ作ったろ
  • reactいれてみたろ
  • ならreduxいれたろ
  • react-routerいれたろ、redux使ってるからconnected-react-routerいれたろ
  • よっしゃ、いつも通りroutingの構文かくで〜
  • ページ真っ白やん・・・

結局、これだ!っていう解は見つかってないんですが、回避策は見つけました。
気づいたきっかけはコレ。
f:id:devdaikichi:20200511223029p:plain

(開発者ツールでURLを表示してみました)
そもそも、localhostなりにサーバ建ててる訳じゃ無いからそうなるわな・・・。
で、こうなってるともちろんrouterで
<Route exact path="/" component={Hoge} />とかやっても表示されない訳です。

解1: exactを使わない

render(
  <Provider store={store}>
    <ConnectedRouter history={history}>
      <Switch>
        <Route path="/fuga" component={fuga} />
        <Route path="/" component={hoge} />
      </Switch>
    </ConnectedRouter>
  </Provider>,
  document.getElementById("root")
);

こんな感じにするとうまい具合に動きます。
Routeで定義したものはもちろん上から評価されるので、exactを使わない場合はこう書くしかないですね
ちなみに今回、こちらのボイラープレートのソースを参考にしてましたが

github.com

exact使ってませんね、ハイ。
exact使わずに書いてるのは今回みたいな事象があるからなのかな?と思ってます。

解2

こんな方法もあるっぽいです。

medium.com

要するにHashRouterを使うことで、静的ページのRoutingを行えるようにしてるってことですね。
<ConnectedRouter><HashRouter>を囲むのがいい方法なのかどうかはわかってないので
今回はこの方法は見送りました。
ちなみにこの方法でいくと、URLはこんな感じになります。

f:id:devdaikichi:20200511224842p:plain

Electronでアドレスバーは出ないので、問題はないんですが
私はこのURL,あまり好きでは無いです・・・。

解3(?)

試してないんですが、これでいけるんじゃない?ってのを一つ。
Electronのアプリを作成するにあたって
起動オプション等を設定するファイル(レンダープロセスとかの)を作成すると思うんですが
そこでloadURL関数を使えばlocalhostを読めますよね
要はlocalhostでreactのWebサーバを建てておいて、そいつをElectronで読み込みにいけば
うまくexact効かせられるんじゃないかなーと思ってます。
でもこの方法使うと本末転倒な気が・・・?

終わりに

そもそもElectron + React + Redux + react-routerの組み合わせって一般的なのだろうか
画面遷移についてあまり深く考えたくないからreactやらreact-router使ってみたんですが
余計悩んでしまって、これまた本末転倒な感じになってしまいました。
とはいえ回避策っぽいものは見つかったので、このまま作ってみようと思っています。

現場からは以上です。

【メモ】ejsに文字列の配列を渡すとquotesが消失する

環境

  • Express 4.17.1
  • ejs 3.1.2

概要

こんな感じで渡すとquotesが消える(一部略)。

ソース

app.get('/hoge', function (req, res) {
    var hoge = ["path", "to", "hoge", "fuga"];
    res.render('hoge', { hoge });
})
<html>
  <head>
    <title>test</title>
  </head>
  <body>
    <div id="container"></div>
  </body>
  <script>
    document.getElementById("container").innerHTML= <%=hoge%>;
  </script>
</html>

実行結果

f:id:devdaikichi:20200428124518p:plain

最初ejsで変数を吐く時のタグの違い(<%= %><%- %>)かな?と思ってましたが
どうやら違うようで、どちらにしてもクォーテーションは取り除かれるみたいですね。
とりあえずJSON.stringifyを使用して乗り切ることにしました。

<html>
  <head>
    <title>test</title>
  </head>
  <body>
    <div id="container"></div>
  </body>
  <script>
-    document.getElementById("container").innerHTML = <%-hoge%>;
+    document.getElementById("container").innerHTML = <%-JSON.stringify(hoge)%>;
  </script>
</html>

とりあえずこれでscriptタグ内でも文字列の配列が使えるようになりました。

終わりに

事の発端はchart.jsのlabelにExpress側から配列を渡そうとしたことでした。
数値ならうまくいくのになんでだ?と思って開発者ツールを見ると上記エラーに。
ejsのエスケープ処理でquotesは取り除かれる運命なのだろうか

現場からは以上です。

【メモ】sqlite3のUPSERTを試してみた

環境

Windows 10 Pro 64bit
sqlite3
PowerShell 5.1.18362.752

概要

このたびSQLiteを触る機会があり、リファレンスを眺めているとupsertがあったので試してみた。
調べたところ、二種類あるみたいで
ON CONFLICT
を使って条件分岐させるものと
REPLACE INTO
を使って置換させるものの二種類があることがわかった。

試してみたコマンド等

とりあえず適当にテーブルを作って初期データのINSERT。

C:\hoge> sqlite3 hoge
sqlite> create table user(id integer, name text, description text, primary key(id, name));
sqlite> insert into user (1, 'hoge', 'fuga');

まずはREPLACE INTOから。

sqlite> replace into user values(2, 'hoge', 'fuga')
sqlite> select * from user;
1|hoge|fuga
2|hoge|fuga
sqlite> replace into user values(1, 'hoge', 'fugaaa')
sqlite> select * from user;
2|hoge|fuga
1|hoge|fugaaa

なるほど、delete insertなのか。
replaceっていうから、updateが流れてるのかと思ってた。

次はON CONFLICT

sqlite> insert into user values (2, 'hoge', 'hogefuga') on conflict(id, name) do update set description = 'fugafuga';
sqlite> select * from user;
2|hoge|fugafuga
1|hoge|fugaaa

こっちはまぁ予想通りというか、分岐してupdate文発行してるので
期待通りの結果になった感じ。

終わりに

場合によって二つを使い分ける感じかなと思いました。
すっきりかけるのは前者だけど、条件分けして色んなことをするなら後者かなぁ。

現場からは以上です。

【メモ】ExpressでPOSTした値を取得しようとするとundefinedになる

環境

Windows 10 64bit
Node.js v12.16.2
Express 4.17.1

現象

POSTした値がundefinedになる
こんな感じでいけるだろうと思ってドキュメント読まずに適当に書いたのが以下(一部略)。

'use strict'

const express = require("express");
const app = express();

app.post("/hoge", (req, res) => {
    console.log(req.body)
    console.log(req.body.fuga)
});

// 略

Expressの公式ドキュメント、req.bodyの項を参照するとわかる。
以下、引用

Contains key-value pairs of data submitted in the request body.
By default, it is undefined, and is populated when you use body-parsing middleware such as body-parser and multer.

body-parserを導入しておけば、ミドルウェアとしてよしなにやってくれるということっぽい。
あれほど公式ドキュメントをよm(ry
ちなみに文中で触れているmulterっていうやつはファイルアップロードなんかに使う
multipart/form-dataを処理するためのものっぽい。
とりあえず今はmultipart/form-dataを扱う気はないので、body-parserを使おう。
直したものが以下。

'use strict'

// requires
const express = require("express");
const bodyParser = require('body-parser');

// express settings
const app = express();
app.use(bodyParser.json())

app.post("/hoge", (req, res) => {
    console.log(req.body)
    console.log(req.body.fuga)
});

// 略

これでbodyの中身が取得できるようになりました。

終わりに

行き詰ったら公式ドキュメントを読め・・・というか最初から公式ドキュメントを読めって感じですね。
ただ、やりたいことが頭の中にあるとどうしても先に手を動かしたり、参考ソースを見ちゃうんですよね・・・
Getting Started当たりから実装して、関連してそうなタイトルを公式ドキュメントからチョイスしていく形に
シフトできればこういった問題も無くなりそうだなと思いました。

にしてもなんでmiddlewareに切り離したんだろう。
必要なものは自分でチョイスしてね。という意図があるんだろうか。

現場からは以上です。

3月のMyPlan振り返り

はじめに

リモートワークしたり、出勤せざるを得ない状況になったりしてます。だいきちです。
だいぶ時間たっちゃいましたが3月の振り返り。


3月度振り返り

勉強会に参加して得られた知識をブログで発信する

オンライン勉強会に手を出し始めました。
とりあえず2,3の会参加してみました。 運営の方たちが頑張ってくれているおかげか、特に支障となるようなこともなく
スムーズに会が進行されているのが印象的でした。
オンライン会議である故、環境によっては音声が途切れたりするのかなとも思っていましたが
それもなかったので聞きやすかったです。

出版記念イベントでは、魅力的に見えたので本を購入しました(目下、読んでいる途中)



新型コロナウィルスの影響で、自宅にこもることが多くなった現在
「さぁ、暇になったぞ。何をしようか」という時に
こういった勉強用とかハンズオン用の本が手元にあるのは心強いです。
(自己研鑽と時間を効率的に使う意味で)

体重を落とす(70kg目標)

これも新型コロナウィルスの影響でジムに行けれなくなってしまったので
とりあえず腹筋ローラーで耐え忍んでます。
本当はリングフィットとか買って楽しく運動したいのですが
我が家のSwitchはLiteなのでできないんですよね・・・残念。

認証・認可技術について理解・試してみる

ベストプラクティスなのでは?と思うような記事を発見。
qiita.com
毎度JWT vs Cookieで悩んでいたので、これはありがたい記事だと思いました。
ログインの認証はこれでいこうかなと思います。
(CookieSameSite 属性、知りませんでした)

終わりに

ようやく3月分の振り返りが書けた。
今回の感染症に対して個人でできることは外出自粛、手洗いうがいくらいだと思っているので
お家で楽しく自己研鑽をするのがベストかなと考え、コードを書いています。
皆さんもお身体にはお気を付けて。

現場からは以上です。